This code is the same in 3.0.x winbindd.
authorJeremy Allison <jra@samba.org>
Wed, 30 Apr 2008 16:44:50 +0000 (09:44 -0700)
committerJeremy Allison <jra@samba.org>
Wed, 30 Apr 2008 16:44:50 +0000 (09:44 -0700)
commit4134b9b214bc56bcaaf789716532470da754bcc2
treed4547bba2dafc7d8323be052146bab2567616a0f
parentd8053bc51077207ff524a73b4db5f29d0c5af80a
This code is the same in 3.0.x winbindd.
From commit commit 5a270bc99f52483f168d662d843672d05be74473
Author: Gerald W. Carter <jerry@samba.org>

    Winbind: Prevent cycle in children list when reaping dead child processes.

    Thanks to Glenn Curtis and Kyle Stemen @ Likewise.  Their explanation is:

        In winbindd_dual.c, there is a list of children processes that
        is maintained using macros DTLIST_ADD and DTLIST_REMOVE. In the
        case when a scheduled_async_request fails, the particular child
        was located in the list, and its attributes were cleared out
        and it was reused for a subsequent async request. The bug was that
        the new request would queue the same node into the doubly-linked
        list and would result in list->next pointing to the same node as
        list itself. This would set up an infinite loop in the processing of
        the for loop when the list of children was referenced.

        Solution was to fully remove the child node from the list, such that
        it could be inserted without risk of being inserted twice.

    Note that the child is re-added to the list in fork_domain_child() again.
Jeremy.
source/nsswitch/winbindd_dual.c