summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2012-05-30 17:12:10 -0700
committerJeremy Allison <jra@samba.org>2012-05-31 04:44:09 +0200
commit5d1a8d2a31390762c471229c2b115147ad0857fe (patch)
tree3cb5b02636243002d0b75e299f36298c739de249
parent5e5f5692b8061e7151f80b155a229ce9bbb31ef9 (diff)
downloadsamba-5d1a8d2a31390762c471229c2b115147ad0857fe.tar.gz
samba-5d1a8d2a31390762c471229c2b115147ad0857fe.tar.bz2
samba-5d1a8d2a31390762c471229c2b115147ad0857fe.zip
Stop spamming the logs with "Could not remove pid XX from serverid.tdb" messages and initiating the cleanup function on every process death.
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
-rw-r--r--source3/smbd/server.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index ab4e971459..f71235f19f 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -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));
}
/****************************************************************************