[Spread-cvs] commit: r361 - branches/branch_3_17/daemon

jonathan at spread.org jonathan at spread.org
Tue Nov 14 00:22:24 EST 2006


Author: jonathan
Date: 2006-11-14 00:22:24 -0500 (Tue, 14 Nov 2006)
New Revision: 361

Modified:
   branches/branch_3_17/daemon/Changelog
   branches/branch_3_17/daemon/arch.h
   branches/branch_3_17/daemon/groups.c
Log:
Fix for bug where group id's are slightly different between processes who
should be in same view. This is done by propagating the grp->changed flag
in groups messages. Bug fix design and patch by John Schultz and Yair Amir.


Modified: branches/branch_3_17/daemon/Changelog
===================================================================
--- branches/branch_3_17/daemon/Changelog	2006-11-14 00:31:16 UTC (rev 360)
+++ branches/branch_3_17/daemon/Changelog	2006-11-14 05:22:24 UTC (rev 361)
@@ -1,3 +1,10 @@
+Tue Nov 14 00:20:02 2006  Jonathan Stanton  <jonathan at cnds.jhu.edu>
+
+	* groups.c (G_compute_and_notify,G_mess_to_group): Propagate
+	grp->changed flag in groups messages so all daemons have 
+	same decision about whether a group is in changed state. Bug fix
+	design and original patch by John Schultz and Yair Amir.
+
 Wed Apr  6 23:41:44 2005  Jonathan Stanton  <jonathan at cnds.jhu.edu>
 
 	* protocol.c (Answer_retrans,Send_new_packets,Prot_handle_token): 

Modified: branches/branch_3_17/daemon/arch.h
===================================================================
--- branches/branch_3_17/daemon/arch.h	2006-11-14 00:31:16 UTC (rev 360)
+++ branches/branch_3_17/daemon/arch.h	2006-11-14 05:22:24 UTC (rev 361)
@@ -94,7 +94,7 @@
 #define         sock_set_errno(a)   (errno = (a)) 
   
 #ifndef byte
-#define byte u_int_8
+#define byte u_int8_t
 #endif
 
 #ifndef int16
@@ -155,6 +155,10 @@
 #define EAGAIN      WSAEWOULDBLOCK
 #define EINPROGRESS WSAEINPROGRESS
 
+#ifndef byte
+#define byte unsigned char
+#endif
+
 #ifndef int16
 #define int16 short
 #endif

Modified: branches/branch_3_17/daemon/groups.c
===================================================================
--- branches/branch_3_17/daemon/groups.c	2006-11-14 00:31:16 UTC (rev 360)
+++ branches/branch_3_17/daemon/groups.c	2006-11-14 05:22:24 UTC (rev 361)
@@ -1566,7 +1566,7 @@
 			strcpy( new_grp->name, this_group->name );
 	
 			new_grp->grp_id = this_group->grp_id;
-			new_grp->changed = 0;
+			new_grp->changed = this_group->changed;;
 			new_grp->num_members = 0;
 			sl_init( &new_grp->MembersList );
 			sl_set_compare( &new_grp->MembersList,
@@ -1587,8 +1587,9 @@
             for( i=0 ; i < num_exist; i++ )
             {
 		  group *currentgroup;
-		  currentgroup =
-		    (group *)sl_getlist(indices[i]->groups)->data;
+		  currentgroup =(group *)sl_getlist(indices[i]->groups)->data;
+                  if (currentgroup->changed) changed = 1;
+
 		  if( G_id_is_equal( orig_grp->grp_id, currentgroup->grp_id ) )
                   {
 			  struct skiplistnode *iter;
@@ -1950,7 +1951,7 @@
 	{
 		if( grp->num_local == 0 ) continue;
 		
-                size_for_this_group = MAX_GROUP_NAME + sizeof(group_id) + sizeof(int16) +
+                size_for_this_group = MAX_GROUP_NAME + sizeof(group_id) + sizeof(int16)  + sizeof(byte) +
                         (grp->num_local * MAX_GROUP_NAME) + Message_get_data_header_size();
                 /* This requires that the number of local group members be limited. */
                 if( size_for_this_group > GROUPS_BUF_SIZE - num_bytes )  break;
@@ -1962,6 +1963,9 @@
 		num_bytes += sizeof( group_id );
 		memcpy( gid_ptr, &grp->grp_id, sizeof(group_id) );
 
+                buf[num_bytes] = (byte) grp->changed;
+		num_bytes += sizeof( byte );
+
 		num_memb_ptr = &buf[num_bytes];
 		num_bytes += sizeof( int16 );
 		num_memb  = 0;
@@ -2048,6 +2052,9 @@
 		num_bytes += sizeof( group_id );
 		memcpy( &grp->grp_id, gid_ptr, sizeof(group_id) );
 
+                grp->changed = Temp_buf[num_bytes];
+		num_bytes += sizeof( byte );
+
 		num_memb_ptr = &Temp_buf[num_bytes];
 		num_bytes += sizeof( int16 );
                 memcpy( &num_memb, num_memb_ptr, sizeof( int16 ) );




More information about the Spread-cvs mailing list