[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