[SCM] CTDB repository - branch master updated - ctdb-1.0.105-5-g12b187f

Ronnie Sahlberg sahlberg at samba.org
Wed Nov 25 18:09:26 MST 2009


The branch, master has been updated
       via  12b187f971d857353403393a9850503e0e558672 (commit)
      from  862526e558099fad4c8259cb88da9b776aa7f80d (commit)

http://gitweb.samba.org/?p=sahlberg/ctdb.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 12b187f971d857353403393a9850503e0e558672
Author: Ronnie Sahlberg <ronniesahlberg at gmail.com>
Date:   Thu Nov 26 12:08:35 2009 +1100

    change the lock wait child handling to use a pipe isntead of a socketpair
    
    remove a stray alarm(30) that caused databases to be unlocked after 30 seconds.

-----------------------------------------------------------------------

Summary of changes:
 server/ctdb_freeze.c |   34 ++++++++++++++++------------------
 1 files changed, 16 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/server/ctdb_freeze.c b/server/ctdb_freeze.c
index 36d033d..0a0ac92 100644
--- a/server/ctdb_freeze.c
+++ b/server/ctdb_freeze.c
@@ -177,8 +177,7 @@ static struct ctdb_freeze_handle *ctdb_freeze_lock(struct ctdb_context *ctdb, ui
 	h->ctdb     = ctdb;
 	h->priority = priority;
 
-	/* use socketpair() instead of pipe() so we have bi-directional fds */
-	if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != 0) {
+	if (pipe(fd) == -1) {
 		DEBUG(DEBUG_ERR,("Failed to create pipe for ctdb_freeze_lock\n"));
 		talloc_free(h);
 		return NULL;
@@ -193,40 +192,39 @@ static struct ctdb_freeze_handle *ctdb_freeze_lock(struct ctdb_context *ctdb, ui
 
 	if (h->child == 0) {
 		int ret;
-		int count = 0;
+
 		/* in the child */
 		close(fd[0]);
+
 		ret = ctdb_lock_all_databases(ctdb, priority);
 		if (ret != 0) {
 			_exit(0);
 		}
 
-		alarm(30);
-
-		while (count++ < 30) {
-			ret = write(fd[1], &ret, sizeof(ret));
-			if (ret == sizeof(ret)) {
-				break;
-			}
+		ret = write(fd[1], &ret, sizeof(ret));
+		if (ret != sizeof(ret)) {
 			DEBUG(DEBUG_ERR, (__location__ " Failed to write to socket from freeze child. ret:%d errno:%u\n", ret, errno));
-			sleep (1);
-		}
-		if (count >= 30) {
-			DEBUG(DEBUG_ERR, (__location__ " Failed to write to socket from freeze child. Aborting freeze child\n"));
-			_exit(0);
+			_exit(1);
 		}
 
-		/* the read here means we will die if the parent exits */
-		read(fd[1], &ret, sizeof(ret));
-		_exit(0);
+		while (1) {
+			sleep(1);
+			if (kill(ctdb->ctdbd_pid, 0) != 0) {
+				DEBUG(DEBUG_ERR,("Parent died. Exiting lock wait child\n"));
+
+				_exit(0);
+			}
+		}
 	}
 
 	talloc_set_destructor(h, ctdb_freeze_handle_destructor);
 
 	close(fd[1]);
+	set_close_on_exec(fd[0]);
 
 	h->fd = fd[0];
 
+
 	fde = event_add_fd(ctdb->ev, h, h->fd, EVENT_FD_READ|EVENT_FD_AUTOCLOSE, 
 			   ctdb_freeze_lock_handler, h);
 	if (fde == NULL) {


-- 
CTDB repository


More information about the samba-cvs mailing list