[SCM] Samba Shared Repository - branch v3-6-test updated
Volker Lendecke
vlendec at samba.org
Fri Jan 14 08:57:10 MST 2011
The branch, v3-6-test has been updated
via 67f35d2 s3:vfs aio_fork children do not go away
via 381aaa3 s3:vfs fix children cleanup in aio_fork
from 8b821f3 s3-build: remove RPCCLI_WINREG subsystem.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 67f35d2151d23e951444163b2a0c6eb4e152ae19
Author: Christian Ambach <christian.ambach at de.ibm.com>
Date: Thu Jan 13 16:04:36 2011 +0100
s3:vfs aio_fork children do not go away
on RHEL 5.5, recvmsg() does not return when it is reading
from the socket and the process on the other side closes
its connection. This left aio children around that should
have gone already and were just wasting system resources.
This patch makes the child go away by writing invalid
data to it so that the child exits.
Pair-Programmed-With: Volker Lendecke <vl at samba.org>
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Fri Jan 14 09:57:18 CET 2011 on sn-devel-104
commit 381aaa3247c7e3c4cf6f99462543bbeed40b3d39
Author: Christian Ambach <christian.ambach at de.ibm.com>
Date: Thu Jan 13 15:59:18 2011 +0100
s3:vfs fix children cleanup in aio_fork
the cleanup loop in aio_fork always stopped operation
on the first inactive child it found. In case lots of
children need to be reaped, it will take multiple runs
before all children are gone
-----------------------------------------------------------------------
Summary of changes:
source3/modules/vfs_aio_fork.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/modules/vfs_aio_fork.c b/source3/modules/vfs_aio_fork.c
index 90d06b1..0d51513 100644
--- a/source3/modules/vfs_aio_fork.c
+++ b/source3/modules/vfs_aio_fork.c
@@ -246,6 +246,7 @@ static void aio_child_cleanup(struct event_context *event_ctx,
"deleting\n", (int)child->pid));
TALLOC_FREE(child);
+ child = next;
}
if (list->children != NULL) {
@@ -421,7 +422,18 @@ static void handle_aio_completion(struct event_context *event_ctx,
static int aio_child_destructor(struct aio_child *child)
{
+ char c=0;
+
SMB_ASSERT((child->aiocb == NULL) || child->cancelled);
+
+ DEBUG(10, ("aio_child_destructor: removing child %d on fd %d\n",
+ child->pid, child->sockfd));
+
+ /*
+ * closing the sockfd makes the child not return from recvmsg() on RHEL
+ * 5.5 so instead force the child to exit by writing bad data to it
+ */
+ write(child->sockfd, &c, sizeof(c));
close(child->sockfd);
DLIST_REMOVE(child->list->children, child);
return 0;
@@ -485,7 +497,8 @@ static NTSTATUS create_aio_child(struct smbd_server_connection *sconn,
aio_child_loop(result->sockfd, result->map);
}
- DEBUG(10, ("Child %d created\n", result->pid));
+ DEBUG(10, ("Child %d created with sockfd %d\n",
+ result->pid, fdpair[0]));
result->sockfd = fdpair[0];
close(fdpair[1]);
--
Samba Shared Repository
More information about the samba-cvs
mailing list