/*
* 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;
}