[Telepathy-commits] [telepathy-mission-control/master] Add a new channel status

Alberto Mardegan alberto.mardegan at nokia.com
Thu Jan 8 01:37:23 PST 2009


Add MCD_CHANNEL_STATUS_HANDLER_INVOKED, to know when it's too late to cancel a
channel request.
---
 src/mcd-channel.c    |    3 ++-
 src/mcd-channel.h    |    1 +
 src/mcd-dispatcher.c |    8 +++++++-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mcd-channel.c b/src/mcd-channel.c
index 7061618..71c369f 100644
--- a/src/mcd-channel.c
+++ b/src/mcd-channel.c
@@ -607,7 +607,8 @@ mcd_channel_abort (McdMission *mission)
     /* If this is still a channel request, signal the failure */
     if (priv->status == MCD_CHANNEL_STATUS_REQUEST ||
         priv->status == MCD_CHANNEL_STATUS_REQUESTED ||
-        priv->status == MCD_CHANNEL_STATUS_DISPATCHING)
+        priv->status == MCD_CHANNEL_STATUS_DISPATCHING ||
+        priv->status == MCD_CHANNEL_STATUS_HANDLER_INVOKED)
     {
         /* this code-path can only happen if the connection is aborted, as in
          * the other cases we handle the error in McdChannel; for this reason,
diff --git a/src/mcd-channel.h b/src/mcd-channel.h
index e8e335c..99cdfe4 100644
--- a/src/mcd-channel.h
+++ b/src/mcd-channel.h
@@ -57,6 +57,7 @@ typedef enum
                                       */
     MCD_CHANNEL_STATUS_DISPATCHING,  /* Telepathy channel is created and
                                         waiting dispatch */
+    MCD_CHANNEL_STATUS_HANDLER_INVOKED,
     MCD_CHANNEL_STATUS_DISPATCHED,   /* Channel has been dispatched to handler
                                       */
     MCD_CHANNEL_STATUS_FAILED,       /* Channel creation failed, or channel
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index a4e0831..6f017cc 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -274,8 +274,11 @@ mcd_dispatcher_context_handler_done (McdDispatcherContext *context)
     for (list = context->channels; list != NULL; list = list->next)
     {
         McdChannel *channel = MCD_CHANNEL (list->data);
+        McdChannelStatus status;
 
-        if (mcd_channel_get_status (channel) == MCD_CHANNEL_STATUS_DISPATCHING)
+        status = mcd_channel_get_status (channel);
+        if (status == MCD_CHANNEL_STATUS_DISPATCHING ||
+            status == MCD_CHANNEL_STATUS_HANDLER_INVOKED)
             channels_left++;
         /* TODO: recognize those channels whose dispatch failed, and
          * re-dispatch them to another handler */
@@ -1214,6 +1217,9 @@ mcd_dispatcher_run_handler (McdDispatcherContext *context,
             user_time = _mcd_channel_get_request_user_action_time (channel);
             if (user_time)
                 user_action_time = user_time;
+
+            mcd_channel_set_status (channel,
+                                    MCD_CHANNEL_STATUS_HANDLER_INVOKED);
         }
 
         /* The callback needs to get the dispatcher context, and the channels
-- 
1.5.6.5




More information about the Telepathy-commits mailing list