Date: Wed, 26 Jan 2005 12:20:24 GMT From: =?koi8-r?B?7MXPztTYxdcg88XSx8XKIOXGyc3P18ne?= <lse@cryptopro.ru> To: freebsd-threads@FreeBSD.org Subject: Re: threads/76690: fork hang in child for (-lc_r & -lthr) Message-ID: <200501261220.j0QCKOBc059484@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR threads/76690; it has been noted by GNATS. From: =?koi8-r?B?7MXPztTYxdcg88XSx8XKIOXGyc3P18ne?= <lse@cryptopro.ru> To: <freebsd-gnats-submit@FreeBSD.org>, =?koi8-r?B?7MXPztTYxdcg88XSx8XKIOXGyc3P18ne?= <lse@cryptopro.ru> Cc: Subject: Re: threads/76690: fork hang in child for (-lc_r & -lthr) Date: Wed, 26 Jan 2005 15:18:38 +0300 Hi, Sorry, program in section "How-To-Repeat" hang only on "-lc_r" library. Hang for library -lthr cause by malloc()/free() in child, not fork() = internally. "Correct" version "How-To-Repeat" program: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # fork-malloc-free.c # echo x - fork-malloc-free.c sed 's/^X//' >fork-malloc-free.c << 'END-of-fork-malloc-free.c' X#include <errno.h> X#include <pthread.h> X#include <signal.h> X#include <stdlib.h> X#include <stdio.h> X#include <sys/wait.h> X#include <unistd.h> X Xconst int INFL =3D 1000000000; Xconst int PTHR =3D 4; Xconst int NATR =3D 2; X X#ifndef SEMI_OK // if SEMI_OK not defined - >95% hang on = my syst em Xconst int FRKL =3D 100; Xconst int CHLD =3D 100; X#else // if SEMI_OK defined - 50% hang on my system Xconst int FRKL =3D 3; Xconst int CHLD =3D 3; X#endif X Xvoid *malloc_free(void *pvcnt) X{ X volatile sig_atomic_t *pscnt =3D (volatile sig_atomic_t *)pvcnt; X int n =3D *pscnt; X int i; X void *m; X X for(i =3D 0; i < n; i++){ X m =3D malloc(10); X *pscnt =3D i; X free(m); X } X return NULL; X} X Xint main (void) X{ X pthread_attr_t attrs[NATR]; X pthread_t thread_id; X volatile sig_atomic_t cnt[PTHR]; X int i; X int cntr; X pid_t pid, savedpid; X int pstat; X X pthread_attr_init(&attrs[0]); X pthread_attr_setdetachstate(&attrs[0], PTHREAD_CREATE_DETACHED); X pthread_attr_setscope(&attrs[0], PTHREAD_SCOPE_PROCESS); X pthread_attr_init(&attrs[1]); X pthread_attr_setdetachstate(&attrs[1], PTHREAD_CREATE_DETACHED); X pthread_attr_setscope(&attrs[1], PTHREAD_SCOPE_SYSTEM); X for(i =3D 0; i < PTHR; i++) { X cnt[i] =3D INFL; X if(pthread_create(&thread_id, &attrs[i%NATR], X &malloc_free, (void *)&cnt[i])){ X perror("pthread_create:"); X return 1; X } X } X fprintf(stderr, "Threads created.\n"); X X for (i =3D 0; i < FRKL; i++) { X fprintf(stderr, "forking\n"); X switch(pid =3D fork()) { X case -1: /* error */ X perror("fork fail:"); X return 2; X case 0: /* child */ X // -lc_r: X // Child don't anything to work - simple exit X // When child hang, this hang in fork code X // X // -lthr: X // Child hang by malloc()/free(); X cntr =3D CHLD; X malloc_free(&cntr); X _exit(0); X default: /* parent */ X savedpid =3D pid; X do{ X pid =3D waitpid(savedpid, &pstat, 0); X }while(pid =3D=3D -1 && errno =3D=3D EINTR); X break; X } X } X fprintf(stderr, "Threads OK:"); X for(i =3D 0; i < PTHR; i++){ X fprintf(stderr, " %d", (int)cnt[i]); X } X fprintf(stderr, "\n"); X _exit(0); X return 0; X} END-of-fork-malloc-free.c exit -- Sorry for my bests English. Serguei E. Leontiev w:+7(095)289-4367 USSR, Moscow, 127018, Obraztsova = 38 Crypto-Pro=9A=9A=9A=9A=9A=9A=9A=9A=9A w:+7(095)933-1168 <http://CryptoPro.ru> m:+7(916)686-1081 SMS: <http://www.mts.ru/sms> =9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A = p:+7(095)231-3838 for abonent +7(916)686-1081 =9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A = h:+7(095)318-1146 USSR, Moscow, 113303, Kakhovka 6-40 =9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A = w:+7(095)939-2382 USSR, Moscow, Universitetskij 13 =9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A=9A<http://lnfm1.sai.msu.ru/~leo>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200501261220.j0QCKOBc059484>