Subject: fork() and mit-pthreads problem
To: None <port-i386@netbsd.org>
From: Matthew Mondor <mmondor@linuxguru.net>
List: port-i386
Date: 11/25/2000 16:37:48
--82I3+IH0IqGh5yIs
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
This code works well on linux, and a friend of mine also
successfully made it work on freebsd without major problems.
I compile it on netbsd-i386 port, using NetBSD 1.5H, which
was 100% recompiled with
CXXFLAGS=CFLAGS="-march=i586 -O3 -DDBUG_OFF", running on
an AMD-K6-2/450 processor with 32 Megs of RAM,
mit-pthreads 1.60 (only uncompiled package, which was
installed using pkg_add)
The various problems I experienced were the following:
1) As soon as fork() (My make_daemon() call) or daemon()
Is called, mit-pthreads are no longer working.
2) Without using fork() or daemon() to detach it, using
& instead at command invocation, it works better,
however concurrent pthreads() execute sequencially
rather than simultaniously when several connections
are served, despite proper pthread_attr initialization.
3) I also noticed that once a fork() is in use, syslog()
seems to require subsequent openlog() calls, which I
found quite surprizing.
I cannot determine either this may be a i386 port bug
or an unexpected behavior of pthreads under netbsd,
any help on understanding the issue would be greatly
appreciated.
The following steps were performed to compile it:
gcc -o mmlist.o -c mmlist.c
gcc -o mmfd.o -c mmfd.c
gcc -o mmidentd.o -I/usr/pkg/pthreads/include -c mmidentd.c
gcc -o mmidentd.dynamic mmidentd.o mmlist.o mmfd.o -L/usr/pkg/pthreads/lib -lpthread
gcc -o mmidentd.static mmidentd.o mmlist.o mmfd.o -L/usr/pkg/pthreads/lib -static -lpthread
NOTE: The dynamic version reports a warning about error.h not being included,
aldough it is:
/usr/pkg/pthreads/lib/libpthread.so: warning: reference to compatibility sys_errlist[]; include <errno.h> for correct reference
/usr/pkg/pthreads/lib/libpthread.so: warning: reference to compatibility sys_nerr; include <errno.h> for correct reference
I herein include the source to attempt to reproduce it
or locate what could be wrong.. I also include a standard
Makefile. In my humble oppinion, pthreads should be
integrated into any production environment, now I don't
happen to be able to use them since my switch to NetBSD...
Matthew Mondor
mmondor@linuxguru.net
--82I3+IH0IqGh5yIs
Content-Type: application/x-tar-gz
Content-Disposition: attachment; filename="mmidentd-0.2.tar.gz"
Content-Transfer-Encoding: base64
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
lapUpSpVqUpVqlKVqlSlKv2m0n8BU4nXHwDIAAA=
--82I3+IH0IqGh5yIs--