[Bug 13422] Add nice API for channel creation

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Tue Jul 13 17:31:17 CEST 2010


https://bugs.freedesktop.org/show_bug.cgi?id=13422

--- Comment #12 from Guillaume Desmottes <guillaume.desmottes at collabora.co.uk> 2010-07-13 08:31:17 PDT ---
(In reply to comment #11)
> In the successful case, the temporary handler should stick around until the
> channel is invalidated, for MC crash-recovery (it needs to be able to say it's
> handling the channel, otherwise MC will close the channel while recovering from
> a crash).

Isn't that what I did in
http://git.collabora.co.uk/?p=user/cassidy/telepathy-glib;a=commitdiff;h=2a4047d81dbed1afd7525d9755f0f681b4b0502b
?

> I think it'd make sense to replace request_ctx with a private
> subclass of TpBaseClient - perhaps called TpAccountCreateAndHandleHelper? -
> which survives until either the channel request fails, or the channel is
> invalidated.

I will look at that.

> The request_ctx shouldn't need to have the TpDBusDaemon in it; I've added
> tp_base_client_get_dbus_daemon() in my trivia branch.
> 
> > +      GError error = { TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
> > +          "We are supposed to handle only one channel" };
> > +
> > +      tp_handle_channels_context_fail (context, &error);
> > +      /* FIXME: Should we fail the operation ? */
> 
> Yes, we should, otherwise the operation will never finish.

done.

> Shouldn't this async operation be cancellable? The meaning of cancelling the
> GCancellable would be something like this:
> 
> * if CreateChannel hasn't returned yet, do nothing
> * when CreateChannel returns: if already cancelled, call Cancel on the
> ChannelRequest
> * if CreateChannel has already returned, but the ChannelRequest hasn't been
> invalidated, call Cancel on it
> * if the ChannelRequest has already been invalidated, we're too late to cancel,
> so ignore it
> 
> This would mean that cancelling the GCancellable would raise TP_ERROR_CANCELLED
> instead of G_IO_ERROR_CANCELLED, which I think is OK. It'd also raise
> TP_ERROR_CANCELLED if someone other than us cancelled the request for some
> reason, or if the TpConnection was disconnected by our request.

Ok, I'll do that.

> > +  if (tp_cli_channel_request_connect_to_failed (ctx->chan_request,
> > +      channel_request_failed_cb, ctx, NULL,
> > +      G_OBJECT (ctx->result), &err) == NULL)
> 
> Connect to TpProxy::invalidated, so you'll handle an MC crash correctly.
> Succeeded maps to TP_DBUS_ERROR_OBJECT_REMOVED, so you'll need to ignore that
> case with g_error_matches(), if you wanted to ignore Succeeded.

done.

> > +  if (g_list_length (channels) != 1)
> 
> G_UNLIKELY?

done.

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.



More information about the telepathy-bugs mailing list