diff options
author | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-01-11 15:59:14 +0100 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-01-11 15:59:14 +0100 |
commit | d75842ff4c8c9d78dbd5462409ab2c93600fa9a6 (patch) | |
tree | 86def8b54a1cb6db27a3bff6c6e6caada203ad13 /gio/gdbusprivate.c | |
parent | 65bd1f526d86ce08d6fa4d7d6fc1140198c9aef1 (diff) | |
parent | fabf506b8d5baf8f59fca563e6f1a62be5148112 (diff) | |
download | glib-wip/gsettings-list.tar.gz |
Merge branch 'master' into wip/gsettings-listwip/gsettings-list
Diffstat (limited to 'gio/gdbusprivate.c')
-rw-r--r-- | gio/gdbusprivate.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c index 43804a406..5f8f1f432 100644 --- a/gio/gdbusprivate.c +++ b/gio/gdbusprivate.c @@ -430,6 +430,7 @@ struct GDBusWorker gint num_writes_pending; guint64 write_num_messages_written; GList *write_pending_flushes; + gboolean flush_pending; }; /* ---------------------------------------------------------------------------------------------------- */ @@ -1155,6 +1156,12 @@ ostream_flush_cb (GObject *source_object, if (error != NULL) g_error_free (error); + /* Make sure we tell folks that we don't have additional + flushes pending */ + g_mutex_lock (data->worker->write_lock); + data->worker->flush_pending = FALSE; + g_mutex_unlock (data->worker->write_lock); + /* OK, cool, finally kick off the next write */ maybe_write_next_message (data->worker); @@ -1207,6 +1214,10 @@ message_written (GDBusWorker *worker, worker->write_pending_flushes = g_list_delete_link (worker->write_pending_flushes, l); } } + if (flushers != NULL) + { + worker->flush_pending = TRUE; + } g_mutex_unlock (worker->write_lock); if (flushers != NULL) @@ -1341,7 +1352,7 @@ static gboolean write_message_in_idle_cb (gpointer user_data) { GDBusWorker *worker = user_data; - if (worker->num_writes_pending == 0) + if (worker->num_writes_pending == 0 && !worker->flush_pending) maybe_write_next_message (worker); return FALSE; } @@ -1424,6 +1435,7 @@ _g_dbus_worker_new (GIOStream *stream, worker->stream = g_object_ref (stream); worker->capabilities = capabilities; worker->cancellable = g_cancellable_new (); + worker->flush_pending = FALSE; worker->frozen = initially_frozen; worker->received_messages_while_frozen = g_queue_new (); |