Hi,

I've had couple of multisync (latest CVS) synchronization
lockups lately and the reason seems to be the following
function:

In other words in one special case the control jumps
out from the function without unclocking the lock.

----------------------------------------------------------
// If the message is on the queue already, dont add this too
void sync_send_msg_once(sync_msg_port *port, int type) {
  sync_msg *msg;
  GList *q;
  g_mutex_lock(port->msg_mutex);
  q = port->msg_queue;
  while (q) {
    msg = q->data;
    if (msg && msg->type == type) {
+     g_mutex_unlock(port->msg_mutex);
      return;
     ^^^^^^^^^^^^^^^^^^^^^^^^^
    }
    q = q->next;
  }
  msg = g_malloc0(sizeof(sync_msg));
  g_assert(msg);
  msg->type = type;
  msg->data = NULL;
  port->msg_queue = g_list_append(port->msg_queue, msg);
  g_mutex_unlock(port->msg_mutex);
  g_cond_signal(port->msg_signal);
}
-------------------------------------------------------

Regards,
Tomi Orava





-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines
at the same time. Free trial click here:http://www.vmware.com/wl/offer/358/0
_______________________________________________
Multisync-users mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/multisync-users

Reply via email to