Stop spamming the logs with "Could not remove pid XX from serverid.tdb" messages...
authorJeremy Allison <jra@samba.org>
Thu, 31 May 2012 00:12:10 +0000 (17:12 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 31 May 2012 02:44:09 +0000 (04:44 +0200)
We now have many sub-processes from smbd that don't serve SMB1/SMB2 requests and
don't register themselves in the serverid.tdb. Only initiate the cleanup
from processes that were explicitly in the child list.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Thu May 31 04:44:09 CEST 2012 on sn-devel-104

source3/smbd/server.c

index ab4e9714591c757e76b9c22970a877a7795f925e..f71235f19f4d08c72f1bf012eb7738275b06a00e 100644 (file)
@@ -416,6 +416,24 @@ static void remove_child_pid(struct smbd_parent_context *parent,
        struct smbd_child_pid *child;
        struct server_id child_id;
 
+       child_id = pid_to_procid(pid);
+
+       for (child = parent->children; child != NULL; child = child->next) {
+               if (child->pid == pid) {
+                       struct smbd_child_pid *tmp = child;
+                       DLIST_REMOVE(parent->children, child);
+                       TALLOC_FREE(tmp);
+                       parent->num_children -= 1;
+                       break;
+               }
+       }
+
+       if (child == NULL) {
+               /* not all forked child processes are added to the children list */
+               DEBUG(2, ("Could not find child %d -- ignoring\n", (int)pid));
+               return;
+       }
+
        if (unclean_shutdown) {
                /* a child terminated uncleanly so tickle all
                   processes to see if they can grab any of the
@@ -435,25 +453,10 @@ static void remove_child_pid(struct smbd_parent_context *parent,
                }
        }
 
-       child_id = pid_to_procid(pid);
-
        if (!serverid_deregister(child_id)) {
                DEBUG(1, ("Could not remove pid %d from serverid.tdb\n",
                          (int)pid));
        }
-
-       for (child = parent->children; child != NULL; child = child->next) {
-               if (child->pid == pid) {
-                       struct smbd_child_pid *tmp = child;
-                       DLIST_REMOVE(parent->children, child);
-                       TALLOC_FREE(tmp);
-                       parent->num_children -= 1;
-                       return;
-               }
-       }
-
-       /* not all forked child processes are added to the children list */
-       DEBUG(2, ("Could not find child %d -- ignoring\n", (int)pid));
 }
 
 /****************************************************************************