On 30 November 2012 10:39, Ajeet Yadav <ajeet.yadav...@gmail.com> wrote: > Linux version 3.0.33 (Cortex A15) > Below program crashes with 2.14.1 glibc but runs fine with 2.11.1 glibc. > > #include <pthread.h> > #include <stdio.h> > #include <stdlib.h> > #include <signal.h> > #include <string.h> > #include <errno.h> > > #define MAX_LINE_SIZE 80 > > #define MAX_THREAD 20 > #define MAX_POPEN 10 > #define MALLOC_SIZE 16 > > void* pipe_thread(void *arg) > { > int i; > char *p = NULL; > FILE *fp[MAX_POPEN]; > char shellCommand[MAX_LINE_SIZE]; > > memset(shellCommand, 0x00, MAX_LINE_SIZE); > sprintf(shellCommand, "mount"); > signal(SIGPIPE, SIG_IGN); > > while (1) { > for (i = 0; i < MAX_POPEN; ++i) { > fp[i] = popen(shellCommand, "r"); > } > > if (p) { > free(p); > } > > for (i = 0; i < MAX_POPEN; ++i) { > if (fp[i]) > pclose(fp[i]); > } > > p = malloc(MALLOC_SIZE); > if (p) > memset(p, 0, MALLOC_SIZE); > } > return NULL; > } > > int main(int argc, char *argv[]) > { > int i; > pthread_t tid; > > for (i = 0; i < MAX_THREAD; ++i) { > pthread_create(&tid, NULL, &pipe_thread, (void*)NULL); > } > sleep(60); > }
On returning from main(), all open streams are closed, but your threads are still running and might call pclose() on an already closed FILE, which is not allowed. -- Mans Rullgard / mru _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain