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

Reply via email to