From mboxrd@z Thu Jan 1 00:00:00 1970 From: teigland@sourceware.org Date: 14 Dec 2006 19:54:16 -0000 Subject: [Cluster-devel] cluster/group/daemon cman.c Message-ID: <20061214195416.19047.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland at sourceware.org 2006-12-14 19:54:16 Modified files: group/daemon : cman.c Log message: Switch from CMAN_DISPATCH_ONE loop to CMAN_DISPATCH_ALL to resolve delayed cman shutdown callbacks. bz 219385 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/cman.c.diff?cvsroot=cluster&r1=1.28&r2=1.29 --- cluster/group/daemon/cman.c 2006/12/01 20:26:01 1.28 +++ cluster/group/daemon/cman.c 2006/12/14 19:54:16 1.29 @@ -10,8 +10,6 @@ static int old_node_count; static cman_node_t cman_nodes[MAX_NODES]; static int cman_node_count; -static int cman_cb; -static int cman_reason; static char name_buf[CMAN_MAX_NODENAME_LEN+1]; @@ -106,26 +104,18 @@ } } -static void process_cman_callback(void) +static void cman_callback(cman_handle_t h, void *private, int reason, int arg) { - switch (cman_reason) { + switch (reason) { + case CMAN_REASON_TRY_SHUTDOWN: + cman_replyto_shutdown(ch, 1); + break; case CMAN_REASON_STATECHANGE: statechange(); break; - default: - break; } } -static void cman_callback(cman_handle_t h, void *private, int reason, int arg) -{ - cman_cb = 1; - cman_reason = reason; - - if (reason == CMAN_REASON_TRY_SHUTDOWN) - cman_replyto_shutdown(ch, 1); -} - static void close_cman(int ci) { log_debug("cluster is down, exiting"); @@ -135,19 +125,7 @@ static void process_cman(int ci) { int rv; - - while (1) { - rv = cman_dispatch(ch, CMAN_DISPATCH_ONE); - if (rv < 0) - break; - - if (cman_cb) { - cman_cb = 0; - process_cman_callback(); - } else - break; - } - + rv = cman_dispatch(ch, CMAN_DISPATCH_ALL); if (rv == -1 && errno == EHOSTDOWN) close_cman(ci); }