Question about rtld-elf. Anyone?.. Anyone?

Narvi narvi at haldjas.folklore.ee
Tue Apr 29 14:59:18 PDT 2003


On Tue, 29 Apr 2003, Daniel Eischen wrote:

> On Tue, 29 Apr 2003, Daniel Eischen wrote:
>
> > On Tue, 29 Apr 2003, Narvi wrote:
> > >
> > > No, you would see the problem as soon as you tried to use a function that
> > > used a locked structure, depending on how the dynamic linker did thinks
> > > this might include any fiunction, including exec* - threads + forking
> > > gives you really fascinating problems. How do you know that say malloc
> > > state was consistent at the moment you forked? You really need
> > > per-subsystem cleanups so that you won't occasionaly fail miserably. Its
> > > not really the threads lib that can / should track locks, unless it comes
> > > with its own copy of the subsystems.
>
> In regards to inconsistent data (and not the state of the locks)...
>
> You could have use an atfork() handler to reinitialize any
> inconsistent data.  POSIX already defines pthread_atfork(),
> and the kernel has at_fork(9) for kernel modules.  Perhaps
> pthread_atfork() could be utilized by libc, being careful
> to detect the potential for threads first.
>

Well, i think we should gurantee something about the sanity of libc
internals to the forked process.

I think it would be more efficent to use a specific cleanup function that
fork() implicitly knows about instead of a number of actual calls to
pthread_atfork. You could probaby set things up so with rtld that the
cleanups happen lazily so that there is no overhead for immediate /
near-immediate exec with no acess to functions that would need the
cleanup, but I don't think its an immediate concern.

> --
> Dan Eischen
>




More information about the freebsd-threads mailing list