[Cluster-devel] cluster/cman-kernel/src membership.c

pcaulfield at sourceware.org pcaulfield at sourceware.org
Thu Jan 18 15:10:20 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	STABLE
Changes by:	pcaulfield at sourceware.org	2007-01-18 15:10:19

Modified files:
	cman-kernel/src: membership.c 

Log message:
	Fix race that could panic if cman_kill_node() is called when we are             shutting down.
	bz#223098

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/membership.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.44.2.18.6.7&r2=1.44.2.18.6.8

--- cluster/cman-kernel/src/Attic/membership.c	2006/06/26 08:54:36	1.44.2.18.6.7
+++ cluster/cman-kernel/src/Attic/membership.c	2007/01/18 15:10:19	1.44.2.18.6.8
@@ -1364,7 +1364,7 @@
 	 * list and wake it */
 	if (current != membership_task) {
 		struct cl_new_dead_node *newnode =
-		    kmalloc(sizeof (struct cl_new_dead_node), GFP_KERNEL);
+			kmalloc(sizeof (struct cl_new_dead_node), GFP_KERNEL);
 		if (!newnode)
 			return;
 		newnode->node = node;
@@ -1372,7 +1372,10 @@
 		list_add_tail(&newnode->list, &new_dead_node_list);
 		set_bit(WAKE_FLAG_DEADNODE, &wake_flags);
 		spin_unlock(&new_dead_node_lock);
-		wake_up_process(membership_task);
+		spin_lock(&membership_task_lock);
+		if (membership_task)
+			wake_up_process(membership_task);
+		spin_unlock(&membership_task_lock);
 		P_MEMB("Passing dead node %s onto kmembershipd\n", node->name);
 		return;
 	}




More information about the Cluster-devel mailing list