[telepathy-mission-control/master] McdDispatchOperation: infer block_finished from ado_pending and observers_pending

Simon McVittie simon.mcvittie at collabora.co.uk
Tue Oct 20 08:47:22 PDT 2009


---
 src/mcd-dispatch-operation-priv.h |    4 ---
 src/mcd-dispatch-operation.c      |   43 ++++++++++++++++--------------------
 2 files changed, 19 insertions(+), 28 deletions(-)

diff --git a/src/mcd-dispatch-operation-priv.h b/src/mcd-dispatch-operation-priv.h
index f0d548c..0becc2b 100644
--- a/src/mcd-dispatch-operation-priv.h
+++ b/src/mcd-dispatch-operation-priv.h
@@ -83,10 +83,6 @@ G_GNUC_INTERNAL GPtrArray *_mcd_dispatch_operation_dup_channel_details (
     McdDispatchOperation *self);
 G_GNUC_INTERNAL gboolean _mcd_dispatch_operation_is_finished (
     McdDispatchOperation *self);
-G_GNUC_INTERNAL void _mcd_dispatch_operation_block_finished (
-    McdDispatchOperation *self);
-G_GNUC_INTERNAL void _mcd_dispatch_operation_unblock_finished (
-    McdDispatchOperation *self);
 G_GNUC_INTERNAL const gchar *_mcd_dispatch_operation_get_claimer (
     McdDispatchOperation *operation);
 G_GNUC_INTERNAL gboolean _mcd_dispatch_operation_finish (
diff --git a/src/mcd-dispatch-operation.c b/src/mcd-dispatch-operation.c
index b2a6d11..884cf0c 100644
--- a/src/mcd-dispatch-operation.c
+++ b/src/mcd-dispatch-operation.c
@@ -78,7 +78,6 @@ struct _McdDispatchOperationPrivate
     gchar *object_path;
     GStrv possible_handlers;
     GHashTable *properties;
-    gsize block_finished;
 
     /* If FALSE, we're not actually on D-Bus; an object path is reserved,
      * but we're inaccessible. */
@@ -128,6 +127,16 @@ struct _McdDispatchOperationPrivate
     gsize ado_pending;
 };
 
+static void _mcd_dispatch_operation_check_finished (
+    McdDispatchOperation *self);
+
+static inline gboolean
+mcd_dispatch_operation_may_finish (McdDispatchOperation *self)
+{
+    return (self->priv->observers_pending == 0 &&
+            self->priv->ado_pending == 0);
+}
+
 gboolean
 _mcd_dispatch_operation_has_observers_pending (McdDispatchOperation *self)
 {
@@ -139,9 +148,9 @@ void
 _mcd_dispatch_operation_inc_observers_pending (McdDispatchOperation *self)
 {
     g_return_if_fail (MCD_IS_DISPATCH_OPERATION (self));
+    g_return_if_fail (!self->priv->finished);
 
     g_object_ref (self);
-    _mcd_dispatch_operation_block_finished (self);
 
     DEBUG ("%" G_GSIZE_FORMAT " -> %" G_GSIZE_FORMAT,
            self->priv->observers_pending,
@@ -159,7 +168,7 @@ _mcd_dispatch_operation_dec_observers_pending (McdDispatchOperation *self)
     g_return_if_fail (self->priv->observers_pending > 0);
     self->priv->observers_pending--;
 
-    _mcd_dispatch_operation_unblock_finished (self);
+    _mcd_dispatch_operation_check_finished (self);
     g_object_unref (self);
 }
 
@@ -174,9 +183,9 @@ void
 _mcd_dispatch_operation_inc_ado_pending (McdDispatchOperation *self)
 {
     g_return_if_fail (MCD_IS_DISPATCH_OPERATION (self));
+    g_return_if_fail (!self->priv->finished);
 
     g_object_ref (self);
-    _mcd_dispatch_operation_block_finished (self);
 
     DEBUG ("%" G_GSIZE_FORMAT " -> %" G_GSIZE_FORMAT,
            self->priv->ado_pending,
@@ -194,7 +203,7 @@ _mcd_dispatch_operation_dec_ado_pending (McdDispatchOperation *self)
     g_return_if_fail (self->priv->ado_pending > 0);
     self->priv->ado_pending--;
 
-    _mcd_dispatch_operation_unblock_finished (self);
+    _mcd_dispatch_operation_check_finished (self);
     g_object_unref (self);
 }
 
@@ -333,7 +342,7 @@ _mcd_dispatch_operation_finish (McdDispatchOperation *operation)
 
     priv->finished = TRUE;
 
-    if (priv->block_finished == 0)
+    if (mcd_dispatch_operation_may_finish (operation))
     {
         DEBUG ("%s/%p has finished", priv->unique_name, operation);
         mcd_dispatch_operation_actually_finish (operation);
@@ -953,7 +962,7 @@ _mcd_dispatch_operation_lose_channel (McdDispatchOperation *self,
         g_critical ("McdChannel has already lost its TpChannel: %p",
             channel);
     }
-    else if (self->priv->block_finished)
+    else if (!mcd_dispatch_operation_may_finish (self))
     {
         /* We're still invoking approvers, so we're not allowed to talk
          * about it right now. Instead, save the signal for later. */
@@ -987,24 +996,10 @@ _mcd_dispatch_operation_lose_channel (McdDispatchOperation *self,
     }
 }
 
-void
-_mcd_dispatch_operation_block_finished (McdDispatchOperation *self)
-{
-    g_return_if_fail (MCD_IS_DISPATCH_OPERATION (self));
-    g_return_if_fail (!self->priv->finished);
-
-    self->priv->block_finished++;
-}
-
-void
-_mcd_dispatch_operation_unblock_finished (McdDispatchOperation *self)
+static void
+_mcd_dispatch_operation_check_finished (McdDispatchOperation *self)
 {
-    g_return_if_fail (MCD_IS_DISPATCH_OPERATION (self));
-    g_return_if_fail (self->priv->block_finished > 0);
-
-    self->priv->block_finished--;
-
-    if (self->priv->block_finished == 0)
+    if (mcd_dispatch_operation_may_finish (self))
     {
         GList *lost_channels;
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list