RE: pthread_atfork() problem on Linux9
On Thu, 3 Apr 2003 Tushar_Oza@xxxxxxxx wrote:
> Yes... Infact I do have printfs that count moduleAttach's
> And print 'em out. So it is decremented to zero and I assume the library is
> unloaded.
>
> At that point, I need the registered handlers to be "unregistered" (in some
> way)
> If not, the executable has a seg fault (core dump)
>
> Makes sense?
;-) If you're asking me, you're really pressing your luck. You probably
no more about this stuff than I do, but maybe I have more experience
resolving problems.
I guess that if the library's unloaded, it's not open any more. The lsof
command can tell you what files are open. You might need a sleep(600);
at some crucial point.
Have you tried gdb on this?
It works best if you compile with debugging options.
>
> -----Original Message-----
> From: John [mailto:red@xxxxxxxxxxxxxxxxxxxxxxx]
> Sent: Thursday, April 03, 2003 7:59 PM
> To: redhat-devel-list@xxxxxxxxxx
> Subject: Re: pthread_atfork() problem on Linux9
>
>
> On Thu, 3 Apr 2003 Tushar_Oza@xxxxxxxx wrote:
>
> > Hello,
> >
> > A brief description of the problem we see on Linux 9 follows:
> >
> > Please let me know if any of you have seen this problem or know how to
> > tackle it!
> >
> >
> > I have a "mylib.so" that calls:
> >
> > _init()
> > {
> > pthread_atfork(NULL, ParentHdlr, ChildHdlr);
> > }
> >
> > _fini()
> > {
> > // do nothing
> + printf(unloading\n");
> > }
> >
> >
> > Another executable mytest.c does the following:
> >
> > main()
> > {
> > void *libHandle = NULL;
> >
> > libHandle = dlopen("mylib.so", RTLD_NOW);
> > // dlopen() call succeeds so I have not included my error checking
> > code here
> > dlclose(libHandle);
> > libHandle = NULL;
> > ...
> > printf("\n In mytest.c: Before fork \n");
> >
> > if ((pid = fork()) < 0)
> > {
> > printf("Fork failed\n");
> > }
> >
> > printf("Something after fork\n");
> > }
> >
> >
> > Note that the fork() is called after the dlclose()
> > And mytest.c is NOT linked with mylib.so
> >
> > The problem is mytest.c causes a SEGMENTATION FAULT on Linux9. Seems
> > to work fine on Linux 8 and below.
> >
> > We suspect that the atfork() handler functions registered at _init are
> > lost And that causes the seg fault before the fork() since it cant
> > find the handlers anymore as the library has been closed.
> >
> > Any help is appreciated. Thanks!
> >From the man page on my system:
>
> dlclose decrements the reference count on the dynamic library handle
> handle. If the reference count drops to zero and no other loaded libraries
> use symbols in it, then the dynamic library is unloaded. If the dynamic
> library exports a routine named _fini, then that routine is called just
> before the library is unloaded.
>
>
> I think unloading is legitimate. Try my patch to see whether it happens.
>
>
--
Please, reply only to the list.
_______________________________________________
Redhat-devel-list mailing list
Redhat-devel-list@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/redhat-devel-list
[Kernel Newbies]
[Red Hat General]
[Fedora]
[Red Hat Install]
[Linux Kernel Development]
[Yosemite News]