Date: Wed, 30 Jul 2003 18:37:00 +0200 From: Thomas Moestl <t.moestl@tu-bs.de> To: Andrew Belashov <bel@orel.ru> Cc: freebsd-sparc64@freebsd.org Subject: Re: fork&Perl BUG Message-ID: <20030730163659.GA662@crow.dom2ip.de> In-Reply-To: <3F27C756.6070201@orel.ru> References: <3F210BF6.6070001@orel.ru> <20030725153258.GE10708@funkthat.com> <3F27A5DB.2050601@orel.ru> <3F27C756.6070201@orel.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
--3MwIy2ne0vdjdPXF Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, 2003/07/30 at 17:25:42 +0400, Andrew Belashov wrote: > I modified Perl by adding sleep(10) in parent after fork(): > --------------------------------------------------------------------- > --- pp_sys.c.orig Fri Apr 6 08:38:46 2001 > +++ pp_sys.c Wed Jul 30 17:17:50 2003 > @@ -3703,6 +3703,9 @@ > if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) > sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); > hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */ > + } else { > + /* PARENT */ > + sleep(10); > } > PUSHi(childpid); > RETURN; > --------------------------------------------------------------------- > > and my test script working OK!!! > --------------------------------------------------------------------- > (gdb) run perlbug.pl 80000 > Starting program: /usr/ports/lang/perl5.debug/work/perl-5.6.1/perl > perlbug.pl 80000 > ................................................................................ > Main: sum = 39977.1619376211, cnt = 80000 > Child working... > Child: sum = 39977.1619376211, cnt = 80000 > Child exiting... > Child pid = 92042 > Parent working... > Parent: sum = 39977.1619376211, cnt = 80000 > Parent waiting a child... > Parent exiting... > --------------------------------------------------------------------- > > IMHO, it is bug in fork(2). This was indeed caused by a kernel bug in the sparc64 pmap, which affected fork() among other things. I've just committed a fix (attached); can you please test it to make sure that it really resolves this problem? Thanks for the report and analysis! - Thomas -- Thomas Moestl <t.moestl@tu-bs.de> http://www.tu-bs.de/~y0015675/ <tmm@FreeBSD.org> http://people.FreeBSD.org/~tmm/ PGP fingerprint: 1C97 A604 2BD0 E492 51D0 9C0F 1FE6 4F1D 419C 776C --3MwIy2ne0vdjdPXF Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="protect.diff" Index: sys/sparc64/sparc64/pmap.c =================================================================== RCS file: /vol/ncvs/src/sys/sparc64/sparc64/pmap.c,v retrieving revision 1.118 diff -u -r1.118 pmap.c --- sys/sparc64/sparc64/pmap.c 6 Jul 2003 20:32:42 -0000 1.118 +++ sys/sparc64/sparc64/pmap.c 30 Jul 2003 16:08:09 -0000 @@ -1161,7 +1161,7 @@ if ((data & TD_W) != 0 && pmap_track_modified(pm, va)) vm_page_dirty(m); } - return (0); + return (1); } /* --3MwIy2ne0vdjdPXF--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030730163659.GA662>