/* * Reproducer for bug #323905. See also * http://bugs.kde.org/show_bug.cgi?id=323905. */ #include <climits> /* PTHREAD_STACK_MIN */ #include <cstdio> /* fprintf() */ #include <fcntl.h> /* O_RDONLY */ #include <pthread.h> #include <unistd.h> /* close() */ /* Happens with two threads also */ #define THREAD_COUNT 256 void* thread(void*) { int fd; /* Happens with any file, not just /dev/null */ fd = open("/dev/null", O_RDONLY); if (fd >= 0) close(fd); else fprintf(stderr, "Failed to open /dev/null\n"); return 0; } int main() { int i, r; pthread_attr_t attr; pthread_t threads[THREAD_COUNT]; pthread_attr_init(&attr); pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN); for (i = 0; i < THREAD_COUNT; ++i) { r = pthread_create(&threads[i], &attr, thread, 0); if (r != 0) { fprintf(stderr, "Failed to create thread %d\n", i); return 1; } } pthread_attr_destroy(&attr); for (i = 0; i < THREAD_COUNT; ++i) { r = pthread_join(threads[i], 0); if (r != 0) { fprintf(stderr, "Failed to join thread %d\n", i); return 1; } } fprintf(stderr, "Done.\n"); return 0; }