null-deref-close-during-select.cpp 687 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #include <sys/select.h>
  4. #include <unistd.h>
  5. int pipefds[2];
  6. int main(int, char**)
  7. {
  8. pipe(pipefds);
  9. pthread_t tid;
  10. pthread_create(
  11. &tid, nullptr, [](void*) -> void* {
  12. sleep(1);
  13. printf("ST: close()\n");
  14. close(pipefds[1]);
  15. pthread_exit(nullptr);
  16. return nullptr;
  17. },
  18. nullptr);
  19. fd_set rfds;
  20. FD_ZERO(&rfds);
  21. FD_SET(pipefds[1], &rfds);
  22. printf("MT: select()\n");
  23. int rc = select(pipefds[1] + 1, &rfds, nullptr, nullptr, nullptr);
  24. if (rc < 0) {
  25. perror("select");
  26. return 1;
  27. }
  28. printf("ok\n");
  29. return 0;
  30. }