[PATCH] clean the event context after fork in
jra at samba.org
Tue Jan 6 03:45:52 GMT 2009
On Mon, Jan 05, 2009 at 02:46:07PM +0100, Stefan (metze) Metzmacher wrote:
> boyang schrieb:
> > Stefan (metze) Metzmacher wrote:
> >> Hi BoYang,
> >>> The point here is that there maybe outstanding requests in parent,
> >>> and async_request_timeout is set, which cause this child try to kill
> >>> some other child, probably be primary domain's child. Look, After
> >>> winbindd started, child for primary domain is forked, then other domains
> >>> such as BUILTIN. If there are outstanding requests sent to child for
> >>> primary domain, async_request_timeout handler is set, which is
> >>> inheritted in child for domain BUILTIN. Later, time expired and child
> >>> for BUILTIN sends SIGTERM to child for primary domain.
> >>> Patches are in the attachment, Thanks!
> >> I think the real solution is to create a new event context in the child
> >> process (and free the parents context). In the end we should do that
> >> also within smbd...
> >> metze
> > Hi, Metze:
> > I've finished the patch to clean event context after fork. Please
> > review it. In event_context_reinit(ev), I freed all timed_event and
> > fd_event to save some memory. Initial test and 'make test' looks fine.
> I think freeing the events is dangerous, as it leaves broken pointers
Yes, I'm planning to add code to go through and clean up
any events left registered after each fork, and change
reinit_after_fork() to smbd_reinit_after_fork(), nmbd_reinit_after_fork()
and winbindd_reinit_after_fork() to make sure each cleans
I agree with your assessment that leaving the broken pointers
around is dangerous.
> I integrated it without freeing the events and your krb5 ticket patch
> in this branch:
> It would be nice if you could test if that branch fixes still fixes all
> the problems you wanted to resolve.
These fixes are important enough to delay 3.3.0 for, IMHO.
Thanks Metze and Boyang, really nice work here !
More information about the samba-technical