Common subdirectories: multisync/src/libversit and multisync.modified/src/libversit
Only in multisync.modified/src/: multisync
diff -u -X multisync.dontdiff multisync/src/syncengine.c multisync.modified/src/syncengine.c
--- multisync/src/syncengine.c	2003-09-02 20:43:08.000000000 +0300
+++ multisync.modified/src/syncengine.c	2003-09-02 20:43:28.000000000 +0300
@@ -367,6 +367,7 @@
 
 void sync_msg_init(sync_msg_port *msg) {
   msg->msg_queue = 0;
+  msg->msg_status = 0;
   msg->msg_signal = g_cond_new();
   msg->msg_mutex = g_mutex_new();
 }
@@ -1410,8 +1411,9 @@
   msg->type = type;
   msg->data = data;
   port->msg_queue = g_list_append(port->msg_queue, msg);
-  g_mutex_unlock(port->msg_mutex);
+  port->msg_status=1;
   g_cond_signal(port->msg_signal);
+  g_mutex_unlock(port->msg_mutex);
 }
 
 void sync_send_msg(sync_msg_port *port, int type) {
@@ -1427,6 +1429,8 @@
   while (q) {
     msg = q->data;
     if (msg && msg->type == type) {
+      port->msg_status=1;
+      g_cond_signal(port->msg_signal);
       g_mutex_unlock(port->msg_mutex);
       return;
     }
@@ -1437,8 +1441,9 @@
   msg->type = type;
   msg->data = NULL;
   port->msg_queue = g_list_append(port->msg_queue, msg);
-  g_mutex_unlock(port->msg_mutex);
+  port->msg_status=1;
   g_cond_signal(port->msg_signal);
+  g_mutex_unlock(port->msg_mutex);
 }
 
 
@@ -1450,12 +1455,20 @@
   g_mutex_lock(port->msg_mutex);
   while(!(entry = g_list_first(port->msg_queue))) {
     if (untiltime) {
-      if (!g_cond_timed_wait(port->msg_signal, port->msg_mutex, untiltime)) {
-	g_mutex_unlock(port->msg_mutex);
-	return(0);
+      while (port->msg_status==0) {
+        ret=g_cond_timed_wait(port->msg_signal, port->msg_mutex, untiltime);
+        if (ret==ETIMEDOUT) {
+          port->msg_status=0;
+          g_mutex_unlock(port->msg_mutex);
+          return(0);
+	}
       }
+      port->msg_status=0;
     } else {
-      g_cond_wait(port->msg_signal, port->msg_mutex);
+      while (port->msg_status==0) {
+        g_cond_wait(port->msg_signal, port->msg_mutex);
+      }
+      port->msg_status=0;
     }
   }
   msg = entry->data;
diff -u -X multisync.dontdiff multisync/src/syncengine.h multisync.modified/src/syncengine.h
--- multisync/src/syncengine.h	2003-09-02 20:43:08.000000000 +0300
+++ multisync.modified/src/syncengine.h	2003-08-30 16:46:01.000000000 +0300
@@ -62,6 +62,7 @@
   
 typedef struct {
   GList *msg_queue;
+  int msg_status;
   GCond *msg_signal;
   GMutex *msg_mutex;
 } sync_msg_port;
