-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hirokazu Yamamoto wrote, On 28.9.2008 4:16: > # I've post mail, but it didn't show up in > http://www.nabble.com/Cygwin-f12165.html. > # Maybe it was not good to attach a file. So try again... > > I'm not familiar with pthread & fork, but I think following code should not > crash. Is this expected behavior? > > #include <stdio.h> > #include <stdlib.h> > #include <pthread.h> > #include <assert.h> > > void *thread_func(void* args) > { > int ret; > pid_t pid; > pthread_t thread; > > puts("thread_func"); > > pid = fork(); > > assert(pid != (pid_t)-1); > > if (pid != 0) /* parent process */ > { > int status; > > printf("parent process (child pid = %d)\n", pid); > > waitpid(pid, &status, 0); > > puts("parent process end"); > } > else /* child process */ > { > puts("child process"); /* crash here */ I think this is not allowed in here. You can only do async-signal-safe stuff in the child. IO is AFAIK not in that category. Basically, the only thing you can safely do in the child process is to call exec().
> } > > return args; > } > > int main() > { > int ret; > pthread_t thread; > > ret = pthread_create(&thread, NULL, thread_func, NULL); > assert(ret == 0); > > ret = pthread_join(thread, NULL); > assert(ret == 0); > } > > // built with "gcc main.c -o main.exe" > > Thank you. - -- VH -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (MingW32) iFYEAREIAAYFAkjfMxcACgkQhQBMvHf/WHkrOgDgjwH6nF9WnksWQtjZDKOutx2d Sk/irkVq2NjjzADeJOjUN3LB+WkRPYGHGubEVHVT7H5DEh2NcZtPyg== =/9e7 -----END PGP SIGNATURE----- -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/