On Wed, 2011-01-26 at 02:30 +0000, Maciej Piechotka wrote: > I'm trying to debug problem with gabble which appeared during last few > days but I cannot pinpoint it. > > telepathy-gabble seems to be unable to connect to jabber server. > Accoring to tcpdump no packets are sent. > > Bus names (per account and per connection) are created but no object is > exported from any of them. > > I've tried with telepathy glib 0.10.2, 0.10.4 with libsoup 2.32.x and > 2.33.x. > > Does anyone can help what is the problem? > > Regards I'm not sure if the problem is with glib or telepathy but I find out what is the problem. The job seems to be modified concurrently so job->cancellable is modified between if's. I've attached two patches: - quick-and-wrong patch makes my system work but it does not check for concurrent modification. - 0000-Check-for-concurrent-modification-of-job-cancellable adds assert after last if to check for modification. Sorry for cross posting but I have really no idea where the problem is. Regards
diff --git a/gio/gioscheduler.c b/gio/gioscheduler.c index 61e1afc..825ccec 100644 --- a/gio/gioscheduler.c +++ b/gio/gioscheduler.c @@ -172,18 +172,19 @@ io_job_thread (gpointer data, { GIOSchedulerJob *job = data; gboolean result; + GCancellable *cancellable = job->cancellable; - if (job->cancellable) - g_cancellable_push_current (job->cancellable); + if (cancellable) + g_cancellable_push_current (cancellable); do { - result = job->job_func (job, job->cancellable, job->data); + result = job->job_func (job, cancellable, job->data); } while (result); - if (job->cancellable) - g_cancellable_pop_current (job->cancellable); + if (cancellable) + g_cancellable_pop_current (cancellable); job_destroy (job); }
From 0c9853ca3b694bfe00a3cd83178ee2450781846f Mon Sep 17 00:00:00 2001 From: Maciej Piechotka <uzytkownik2 gmail com> Date: Thu, 27 Jan 2011 11:40:57 +0000 Subject: [PATCH] Check for concurrent modification of job cancellable --- gio/gioscheduler.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gio/gioscheduler.c b/gio/gioscheduler.c index 61e1afc..c7daa41 100644 --- a/gio/gioscheduler.c +++ b/gio/gioscheduler.c @@ -172,18 +172,20 @@ io_job_thread (gpointer data, { GIOSchedulerJob *job = data; gboolean result; + GCancellable *cancellable = job->cancellable; - if (job->cancellable) - g_cancellable_push_current (job->cancellable); + if (cancellable) + g_cancellable_push_current (cancellable); do { - result = job->job_func (job, job->cancellable, job->data); + result = job->job_func (job, cancellable, job->data); } while (result); - if (job->cancellable) - g_cancellable_pop_current (job->cancellable); + if (cancellable) + g_cancellable_pop_current (cancellable); + g_assert (cancellable == job->cancellable); job_destroy (job); } -- 1.7.4.rc3
Attachment:
signature.asc
Description: This is a digitally signed message part