revise mutex logic
This commit is contained in:
14
gdigi.c
14
gdigi.c
@@ -394,9 +394,8 @@ GString *get_message_by_id(MessageID id)
|
|||||||
guint x, len;
|
guint x, len;
|
||||||
gboolean found = FALSE;
|
gboolean found = FALSE;
|
||||||
|
|
||||||
do {
|
|
||||||
g_mutex_lock(message_queue_mutex);
|
g_mutex_lock(message_queue_mutex);
|
||||||
|
do {
|
||||||
len = g_queue_get_length(message_queue);
|
len = g_queue_get_length(message_queue);
|
||||||
for (x = 0; x<len; x++) {
|
for (x = 0; x<len; x++) {
|
||||||
data = g_queue_peek_nth(message_queue, x);
|
data = g_queue_peek_nth(message_queue, x);
|
||||||
@@ -410,8 +409,8 @@ GString *get_message_by_id(MessageID id)
|
|||||||
if (found == FALSE)
|
if (found == FALSE)
|
||||||
g_cond_wait(message_queue_cond, message_queue_mutex);
|
g_cond_wait(message_queue_cond, message_queue_mutex);
|
||||||
|
|
||||||
g_mutex_unlock(message_queue_mutex);
|
|
||||||
} while (found == FALSE);
|
} while (found == FALSE);
|
||||||
|
g_mutex_unlock(message_queue_mutex);
|
||||||
|
|
||||||
unpack_message(data);
|
unpack_message(data);
|
||||||
|
|
||||||
@@ -668,9 +667,8 @@ GList *get_current_preset()
|
|||||||
|
|
||||||
send_message(REQUEST_PRESET, "\x04\x00", 2);
|
send_message(REQUEST_PRESET, "\x04\x00", 2);
|
||||||
|
|
||||||
do {
|
|
||||||
g_mutex_lock(message_queue_mutex);
|
g_mutex_lock(message_queue_mutex);
|
||||||
|
do {
|
||||||
len = g_queue_get_length(message_queue);
|
len = g_queue_get_length(message_queue);
|
||||||
|
|
||||||
for (x = 0; x<len && (found == FALSE); x++) {
|
for (x = 0; x<len && (found == FALSE); x++) {
|
||||||
@@ -704,10 +702,12 @@ GList *get_current_preset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
|
} else {
|
||||||
|
/* Receive Preset Start not found in message queue */
|
||||||
|
g_cond_wait(message_queue_cond, message_queue_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_mutex_unlock(message_queue_mutex);
|
|
||||||
} while (done == FALSE);
|
} while (done == FALSE);
|
||||||
|
g_mutex_unlock(message_queue_mutex);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user