1
0
mirror of https://gitlab.gnome.org/GNOME/glib.git synced 2025-04-27 01:26:52 +02:00

GAsyncQueue: use g_queue_init() not g_queue_new()

By using g_queue_init() instead of g_queue_new(), we can avoid
a separate memory allocation.

Bug 626704
This commit is contained in:
Havoc Pennington 2010-08-12 23:57:26 -04:00 committed by Matthias Clasen
parent f424aa9581
commit 106bde0a8f

@ -92,7 +92,7 @@ struct _GAsyncQueue
{ {
GMutex *mutex; GMutex *mutex;
GCond *cond; GCond *cond;
GQueue *queue; GQueue queue;
GDestroyNotify item_free_func; GDestroyNotify item_free_func;
guint waiting_threads; guint waiting_threads;
gint32 ref_count; gint32 ref_count;
@ -116,7 +116,7 @@ g_async_queue_new (void)
GAsyncQueue* retval = g_new (GAsyncQueue, 1); GAsyncQueue* retval = g_new (GAsyncQueue, 1);
retval->mutex = g_mutex_new (); retval->mutex = g_mutex_new ();
retval->cond = NULL; retval->cond = NULL;
retval->queue = g_queue_new (); g_queue_init (&retval->queue);
retval->waiting_threads = 0; retval->waiting_threads = 0;
retval->ref_count = 1; retval->ref_count = 1;
retval->item_free_func = NULL; retval->item_free_func = NULL;
@ -228,8 +228,8 @@ g_async_queue_unref (GAsyncQueue *queue)
if (queue->cond) if (queue->cond)
g_cond_free (queue->cond); g_cond_free (queue->cond);
if (queue->item_free_func) if (queue->item_free_func)
g_queue_foreach (queue->queue, (GFunc) queue->item_free_func, NULL); g_queue_foreach (&queue->queue, (GFunc) queue->item_free_func, NULL);
g_queue_free (queue->queue); g_queue_clear (&queue->queue);
g_free (queue); g_free (queue);
} }
} }
@ -300,7 +300,7 @@ g_async_queue_push_unlocked (GAsyncQueue* queue, gpointer data)
g_return_if_fail (g_atomic_int_get (&queue->ref_count) > 0); g_return_if_fail (g_atomic_int_get (&queue->ref_count) > 0);
g_return_if_fail (data); g_return_if_fail (data);
g_queue_push_head (queue->queue, data); g_queue_push_head (&queue->queue, data);
if (queue->waiting_threads > 0) if (queue->waiting_threads > 0)
g_cond_signal (queue->cond); g_cond_signal (queue->cond);
} }
@ -386,7 +386,7 @@ g_async_queue_push_sorted_unlocked (GAsyncQueue *queue,
sd.func = func; sd.func = func;
sd.user_data = user_data; sd.user_data = user_data;
g_queue_insert_sorted (queue->queue, g_queue_insert_sorted (&queue->queue,
data, data,
(GCompareDataFunc)g_async_queue_invert_compare, (GCompareDataFunc)g_async_queue_invert_compare,
&sd); &sd);
@ -401,7 +401,7 @@ g_async_queue_pop_intern_unlocked (GAsyncQueue *queue,
{ {
gpointer retval; gpointer retval;
if (!g_queue_peek_tail_link (queue->queue)) if (!g_queue_peek_tail_link (&queue->queue))
{ {
if (try) if (try)
return NULL; return NULL;
@ -412,23 +412,23 @@ g_async_queue_pop_intern_unlocked (GAsyncQueue *queue,
if (!end_time) if (!end_time)
{ {
queue->waiting_threads++; queue->waiting_threads++;
while (!g_queue_peek_tail_link (queue->queue)) while (!g_queue_peek_tail_link (&queue->queue))
g_cond_wait (queue->cond, queue->mutex); g_cond_wait (queue->cond, queue->mutex);
queue->waiting_threads--; queue->waiting_threads--;
} }
else else
{ {
queue->waiting_threads++; queue->waiting_threads++;
while (!g_queue_peek_tail_link (queue->queue)) while (!g_queue_peek_tail_link (&queue->queue))
if (!g_cond_timed_wait (queue->cond, queue->mutex, end_time)) if (!g_cond_timed_wait (queue->cond, queue->mutex, end_time))
break; break;
queue->waiting_threads--; queue->waiting_threads--;
if (!g_queue_peek_tail_link (queue->queue)) if (!g_queue_peek_tail_link (&queue->queue))
return NULL; return NULL;
} }
} }
retval = g_queue_pop_tail (queue->queue); retval = g_queue_pop_tail (&queue->queue);
g_assert (retval); g_assert (retval);
@ -599,7 +599,7 @@ g_async_queue_length (GAsyncQueue* queue)
g_return_val_if_fail (g_atomic_int_get (&queue->ref_count) > 0, 0); g_return_val_if_fail (g_atomic_int_get (&queue->ref_count) > 0, 0);
g_mutex_lock (queue->mutex); g_mutex_lock (queue->mutex);
retval = queue->queue->length - queue->waiting_threads; retval = queue->queue.length - queue->waiting_threads;
g_mutex_unlock (queue->mutex); g_mutex_unlock (queue->mutex);
return retval; return retval;
@ -626,7 +626,7 @@ g_async_queue_length_unlocked (GAsyncQueue* queue)
g_return_val_if_fail (queue, 0); g_return_val_if_fail (queue, 0);
g_return_val_if_fail (g_atomic_int_get (&queue->ref_count) > 0, 0); g_return_val_if_fail (g_atomic_int_get (&queue->ref_count) > 0, 0);
return queue->queue->length - queue->waiting_threads; return queue->queue.length - queue->waiting_threads;
} }
/** /**
@ -702,7 +702,7 @@ g_async_queue_sort_unlocked (GAsyncQueue *queue,
sd.func = func; sd.func = func;
sd.user_data = user_data; sd.user_data = user_data;
g_queue_sort (queue->queue, g_queue_sort (&queue->queue,
(GCompareDataFunc)g_async_queue_invert_compare, (GCompareDataFunc)g_async_queue_invert_compare,
&sd); &sd);
} }