After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 523463 - Core dump in gmain.c:2482:IA__g_main_context_check()
Core dump in gmain.c:2482:IA__g_main_context_check()
Status: RESOLVED FIXED
Product: glib
Classification: Platform
Component: mainloop
2.16.x
Other All
: Normal critical
: ---
Assigned To: gtkdev
gtkdev
: 418069 448467 448876 478585 479996 480380 482819 484068 485489 491945 492041 495591 495622 503690 504882 507058 509548 509639 510370 510696 514369 518922 519444 527295 527716 534060 535995 541639 551030 551257 552337 553618 554210 554231 554449 555479 556525 556923 556999 558573 558861 558862 559565 562463 568306 569256 572375 572472 574262 574997 575716 577148 577665 578156 581069 581471 581646 582709 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2008-03-19 21:34 UTC by Paul Smith
Modified: 2010-01-15 03:56 UTC
See Also:
GNOME target: ---
GNOME version: 2.19/2.20


Attachments
Insufficient fix for this bug (437 bytes, patch)
2008-03-21 22:48 UTC, Paul Smith
none Details | Review
Second attempt at a patch for glib (3.18 KB, patch)
2008-04-23 12:19 UTC, Paul Smith
needs-work Details | Review
another patch (2.04 KB, patch)
2008-09-07 04:25 UTC, Matthias Clasen
accepted-commit_now Details | Review

Description Paul Smith 2008-03-19 21:34:26 UTC
Steps to reproduce:
I'm not sure how to reproduce this.  I built glib, libsoup, libbonobo, libgtkth l, evolution-data-server, evolution, evolution-exchange, and evolution-webcal as checked out from SVN trunk today at about 2pm EST.  I was trying to accept a meeting request from Exchange when Evolution dumped core.  Examining the core dump led me to a glib problem.

I'm using glib SVN:

$ svn info
Path: .
URL: http://svn.gnome.org/svn/glib/trunk
Repository Root: http://svn.gnome.org/svn/glib
Repository UUID: 5bbd4a9e-d125-0410-bf1d-f987e7eefc80
Revision: 6738
Node Kind: directory
Schedule: normal
Last Changed Author: sbacher
Last Changed Rev: 6737
Last Changed Date: 2008-03-19 10:07:00 -0400 (Wed, 19 Mar 2008)


Stack trace:
Core was generated by `/opt/evo/bin/evolution --component=mail'.
Program terminated with signal 11, Segmentation fault.
  • #0 IA__g_main_context_check
    at ../../../glib/glib/gmain.c line 2482
  • #0 IA__g_main_context_check
    at ../../../glib/glib/gmain.c line 2482
  • #1 g_main_context_iterate
    at ../../../glib/glib/gmain.c line 2633
  • #2 IA__g_main_loop_run
    at ../../../glib/glib/gmain.c line 2844
  • #3 bonobo_main
    at ../../../libbonobo/bonobo/bonobo-main.c line 311
  • #4 main
    at ../../../evolution/shell/main.c line 782

(gdb) p n_fds
$2 = 7

(gdb) p i
$3 = 6

(gdb) p *context->poll_records->next->next->next->next->next->next
$4 = {fd = 0x86f0334, next = 0x0, priority = 0}


Other information:
Examining the source here, it seems like there is a serious bug in this loop:

2478      pollrec = context->poll_records;
2479      i = 0;
2480      while (i < n_fds)
2481        {
2482          if (pollrec->fd->events)
2483            {
2484              pollrec->fd->revents = fds[i].revents;
2485              i++;
2486            }
2487          pollrec = pollrec->next;
2488        }

The while() statement uses a condition of i<n_fds to determine when to exit, but i is not always incremented: it's only incremented when pollrec->fd->events is true.  Because we don't check to see if pollrec is NULL, it's easy to walk off the end of this linked list, which is what happened here.

Note in the above gdb output n_fds is 7, i is 6, and there are in fact 7 records in the context->poll_records linked list.  But somewhere along the line we must have skipped one of the i++ statements, while still performing the pollrec = pollrec->next statement.

I don't know the code well enough to know if the answer is to add another test to the while condition:

    while (i < n_fds && pollrec)

or to move the pollrec = pollrec->next inside the if-statement along with i++, or what.
Comment 1 Paul Smith 2008-03-19 21:55:09 UTC
I did a search in Bugzilla for IA__g_main_context_check and I found a lot of bugs where something (usually Evolution) dumped core in this function, right around this line.  I also checked the Subversion history via "Annotate" and this code was apparently added in SVN revision 943, on Tue Dec 5 20:45:33 2000 UTC and it doesn't seem like it has changed since.  Either I don't understand the code, or there's been a bug here for quite a while.
Comment 2 Marc-Andre Lureau 2008-03-19 22:12:26 UTC
whoo.. you should reference the duplicates you found.
Comment 3 Paul Smith 2008-03-19 22:39:04 UTC
I just did a search on IA__g_main_context_check and got a response of 24 bugs.  I believe all but one or two are duplicates of this bug; here is the list of bugs I think are duplicates.  I can't mark them as such unfortunately.

Bug #448467
  • #2 <signal handler called>
  • #3 IA__g_main_context_check
    at gmain.c line 2540
  • #2 <signal handler called>
  • #3 IA__g_main_context_check
    at gmain.c line 2540
  • #2 <signal handler called>
  • #3 IA__g_main_context_check
    at gmain.c line 2523
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /tmp/buildd/glib2.0-2.14.1/glib/gmain.c line 2540
  • #9 <signal handler called>
  • #10 IA__g_main_context_check
    at gmain.c line 2540
  • #8 <signal handler called>
  • #9 IA__g_main_context_check
    at gmain.c line 2540
  • #2 <signal handler called>
  • #3 IA__g_main_context_check
    at gmain.c line 2523
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /build/buildd/glib2.0-2.14.2/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /tmp/buildd/glib2.0-2.14.1/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /tmp/buildd/glib2.0-2.14.1/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /build/buildd/glib2.0-2.14.2/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at /build/buildd/glib2.0-2.14.4/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at gmain.c line 2540
  • #9 <signal handler called>
  • #10 IA__g_main_context_check
    at gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at gmain.c line 2540
  • #6 <signal handler called>
  • #7 IA__g_main_context_check
    at /tmp/buildd/glib2.0-2.14.3/glib/gmain.c line 2540
  • #4 <signal handler called>
  • #5 IA__g_main_context_check
    at gmain.c line 2540
  • #9 <signal handler called>
  • #10 IA__g_main_context_check
    at gmain.c line 2540

Comment 4 Morten Welinder 2008-03-20 23:02:30 UTC
Adding a NULL check would be harmless, but might be fixing the symptom.

In a single-threaded program all should be fine: g_main_context_query
counts the number in the way that g_main_context_check expects it
done.

However, in a multi-threaded environment I am not so sure that things
are right.  For example, have a look at g_main_context_iterate.
Between the call to g_main_context_query and the call to g_main_context_check,
what is preventing the context to be updated?  The lock is specifically
not held.  And g_main_context_poll might cause changes.
Comment 5 Paul Smith 2008-03-21 00:18:54 UTC
Yes, that's what I thought as well (adding the NULL check would just mask the real problem).  Looking at this code, it appears to test context->poll_changed and if it's set, it returns early saying "If the set of poll file descriptors changed, bail out and let the main loop rerun".  The poll_changed member is reset after we count the number of fds in g_main_context_query(), and it's set whenever we add or remove items in the poll_records list.

So, it seems pretty safe that we won't get to this loop if there have been records added or removed from the list.

However, what we AREN'T safe against here is if one of the existing records had their fd->events pointer reset between the query function (counts them) and the iterate function (walks them).  If they did, then the loop will walk off the end and you'll get a core dump.


It will require a good bit more spelunking to determine when that pointer could be reset, and what the right way is to guard against it.


One option would be to ignore any value that should have been assigned to a record which now has an empty field; that would involve rewriting the problematic loop like this:

      pollrec = context->poll_records;
      i = 0;
      while (i < n_fds)
        {
          if (pollrec->fd->events)
            pollrec->fd->revents = fds[i].revents;
          i++;
          pollrec = pollrec->next;
        }

This would fix the core but I don't know whether or not it's the right thing to do.
Comment 6 Paul Smith 2008-03-21 22:48:13 UTC
Created attachment 107767 [details] [review]
Insufficient fix for this bug

I've attached a patch which implements my last comment.  It seems correct to me, or at least as correct as can be accomplished in this situation.  The only alternative I can see is perform another sweep of the records list to make sure they are all present, and if not fail the same way as we fail if the records list has been changed.  We can't wait until we find the error since we'll have processed some but not all of the fds which doesn't seem like a good idea (but, I know the code only very superficially).

Of course, in a multi-threaded environment just locking the records list doesn't guarantee that the records it points to won't be modified in another thread; I don't know if we can/should bother locking all those records as well, or something.
Comment 7 Owen Taylor 2008-03-22 15:24:58 UTC
The patch is certainly not correct as it stands without the 
corresponding change to g_main_context_query(). You'll a) get out of
sync and b) read past the end of the fds array if there are any
pollrecs with NULL ->events.

If the corresponding change to g_main_context_query() was made, the
patch would make more sense.

But I'd really like to know in what circumstances ->events is being
mutated to make sure that diagnosis is correct. Adding a poll record
then changing ->events later was certainly not an anticipated
usage of the API.
Comment 8 Paul Smith 2008-03-22 17:46:36 UTC
Hi Owen.  You're right; I was concentrating on not walking off the linked list and didn't pay enough attention to the fds array.  I'll have to go back and look at g_main_context_query().

I do agree with you that even were the patch correct, it feels like a workaround rather than a fully-grokked solution to the problem.  However, I'd definitely need to dig a lot farther into the code to understand the way events and revents are used, and what areas of the code might be changing them.  The records stuff is nice in that it's wholely contained in gmain.c and therefore easy to understand.

It's probably more efficient for someone who's actually ever written a line of glib code to look into the issue :-).  But, given the number of bugs that have been filed related to this problem I think it's important to get to the bottom of it.
Comment 9 Paul Smith 2008-03-22 17:48:29 UTC
Comment on attachment 107767 [details] [review]
Insufficient fix for this bug

See Owen Taylor's comment #7; this patch isn't completely correct.
Comment 10 Owen Taylor 2008-03-22 19:48:12 UTC
I don't think digging into the GLib code would tell you anything about
the usage of the events field ... the GLib usage is all as expected
when I originally wrote the code.

But if you look at:

 http://svn.gnome.org/viewvc/ORBit2/trunk/linc2/src/linc-source.c?view=markup

(This is the CORBA implementation that evolution uses internally), and 
in particular linc_source_set_condition(), you'll see that it does change 
the events field on the fly. In light of that tracking down the exact 
sequence of rare conditions between threads to figure out the crash isn't
really necessary ... I think we can go ahead and adjust the GLib code
to try and be robust against this (ab)use.

If you extended the if (pollfd->events) removal to cover g_main_context_query()
as well, then the downsides I see are:

 - Tiny amount of performance loss, as pollfd records with events=0
   will be passed to the kernel.

 - If you have a pollfd with events=0 that is in an error state (e.g., has
   an invalid FD in it), then GLib will spin at 100% cpu, where previously
   it would not.

I don't see much of an alternative within the constraints of how the code
is structured and exposed publically, so I'd be OK with such a patch.

   
Comment 11 Owen Taylor 2008-03-22 19:49:45 UTC
(BTW, I forgot to mention: good work in tracking this down! it's presumably
been causing the occasional evolution crash for years.)
Comment 12 Jonathan Matthew 2008-03-30 01:49:25 UTC
*** Bug 482819 has been marked as a duplicate of this bug. ***
Comment 13 Jonathan Matthew 2008-03-30 02:18:32 UTC
grepping through my jhbuild source directory, I found some code in avahi that  appears to do this too: avahi-glib/glib-watch.c:watch_update().
Comment 14 Diego Escalante Urrelo (not reading bugmail) 2008-04-02 09:16:07 UTC
*** Bug 491945 has been marked as a duplicate of this bug. ***
Comment 15 Diego Escalante Urrelo (not reading bugmail) 2008-04-02 09:16:39 UTC
*** Bug 495622 has been marked as a duplicate of this bug. ***
Comment 16 Jonathan Matthew 2008-04-11 23:25:35 UTC
*** Bug 527295 has been marked as a duplicate of this bug. ***
Comment 17 Jonathan Matthew 2008-04-12 23:36:36 UTC
*** Bug 527716 has been marked as a duplicate of this bug. ***
Comment 18 Milan Crha 2008-04-22 15:55:06 UTC
Paul, can you paste here complete stack trace from evolution, when it appears again? I've such a feeling it's not a glib issue, but I can be wrong.
Comment 19 Paul Smith 2008-04-22 16:21:04 UTC
I DID put a complete stack trace from evolution, in the description.  It's only 5 frames deep but the last frame is main() just as you'd expect.  Also, if you look at the various bugs that have been filed as duplicates against this bug you'll see they all have identical stack traces at the top where the core happens, but some of them are from completely different applications including rhythmbox etc.

And, check the discussion between myself and Owen Taylor in this bug.  I'm pretty confident (as is Owen) that this is a bug in glib and not specific to Evo.

Why do you think it's not a glib issue?  There seems to be PLENTY of evidence in this bug report showing that it is.

I'd like to get around to creating a correct patch for this but I just haven't found the time.  It's actually not that easy to know how to fix this bug unless you have a lot of understanding of how the glib event loop works, which I definitely don't have.
Comment 20 Milan Crha 2008-04-22 17:09:31 UTC
I thought about "thread apply all bt", not only "bt". It will show all threads, which I call complete stack trace. :)

I saw some crashers which show signal handler in main thread, but the reason for the crash was caused in the other thread. I'm just wondering how much is this related to address book lookups, which some of your possible duplicates has too.

I read briefly this bug report, I also looked into your patch and I also do not know glib so good to have any idea on it :) But there obviously some possibility to move over border in the while you changed.
Comment 21 Paul Smith 2008-04-22 17:29:25 UTC
OK, see below for an all-thread bt:

(gdb) thread apply all bt

Thread 1 (process 25310)

  • #0 IA__g_main_context_check
    at ../../../glib/glib/gmain.c line 2482
  • #1 g_main_context_iterate
    at ../../../glib/glib/gmain.c line 2633
  • #2 IA__g_main_loop_run
    at ../../../glib/glib/gmain.c line 2844
  • #3 bonobo_main
    at ../../../libbonobo/bonobo/bonobo-main.c line 311
  • #4 main
    at ../../../evolution/shell/main.c line 782

Comment 22 Matthew Barnes 2008-04-22 20:16:35 UTC
Paul, would you mind submitting a revised patch following Owen's suggestions?  Then Owen or someone can review and hopefully approve it so we can close this.

Nice work, btw.  I've seen similar stack traces myself time and again from Evolution and it never occurred to me it could be a GLib/ORBit issue.
Comment 23 Paul Smith 2008-04-22 20:31:34 UTC
OK, I'll make some time tonight to get into this.
Comment 24 Paul Smith 2008-04-23 12:19:59 UTC
Created attachment 109762 [details] [review]
Second attempt at a patch for glib

Sorry for the delay, but I had to get some sleep and it took a long time to recompile the latest Evolution (I hadn't done it in a while).  I've tested the new Evo with this change applied to glib and it seems to work OK, although obviously I don't know how exactly to trigger the bug so I can't really say.  I think this is what Owen was requesting in his comments.  Please let me know if I got something wrong.

Sorry about the extra whitespace changes; I have Emacs set up to clean up whitespace automatically and there is a LOT of extra whitespace in this file; I removed most of it from the patch before I posted it.
Comment 25 Priit Laes (IRC: plaes) 2008-05-06 08:46:40 UTC
*** Bug 448876 has been marked as a duplicate of this bug. ***
Comment 26 Priit Laes (IRC: plaes) 2008-05-06 08:49:44 UTC
*** Bug 448467 has been marked as a duplicate of this bug. ***
Comment 27 Matthias Clasen 2008-05-15 06:30:08 UTC
Owen, does the patch look like what you were expecting ?
Comment 28 Owen Taylor 2008-05-19 17:10:36 UTC
Comment on attachment 109762 [details] [review]
Second attempt at a patch for glib

This patch is getting closer, but isn't quite there... as it is currently, it will leave entries in the poll[] array with unitialized events and fields. I would suggest simply removing the pollrec->fd->events check from g_main_context_query().

Also, I'd like to see a comment to prevent this from being unbroken by someone optimizing it later. Say:

/* We need to include entries with fd->events == 0 in the array because otherwise if the application changes fd->events behind our back and makes it non-zero , we'll be out of sync when we check the fds[] array. (Changing fd->events after adding an FD wasn't an anticipated use of this API, but it occurs in practice.) */
Comment 29 Jonathan Matthew 2008-07-27 06:51:57 UTC
*** Bug 535995 has been marked as a duplicate of this bug. ***
Comment 30 Claudio Saavedra 2008-08-25 20:10:38 UTC
Is it likely that bug #533225 and its duplicates are caused by this?
Comment 31 Felix Riemann 2008-09-05 21:15:20 UTC
*** Bug 551030 has been marked as a duplicate of this bug. ***
Comment 32 Matthias Clasen 2008-09-07 04:25:11 UTC
Created attachment 118198 [details] [review]
another patch

Does this match what you want to see, Owen ?
Comment 33 Owen Taylor 2008-09-08 21:37:30 UTC
Comment on attachment 118198 [details] [review]
another patch

That looks good to me.
Comment 34 Matthias Clasen 2008-09-09 06:04:31 UTC
2008-09-09  Matthias Clasen  <mclasen@redhat.com>

        Bug 523463 – Core dump in gmain.c:2482:IA__g_main_context_check()

        * glib/gmain.c (g_main_context_check): Be robust against setting
        event fields on the fly, as e.g. happens in linc. Tracked down
        by Paul Smith, fix proposed by Owen Taylor.
Comment 35 Milan Crha 2008-09-16 13:13:20 UTC
*** Bug 518922 has been marked as a duplicate of this bug. ***
Comment 36 Paul Smith 2008-09-16 13:22:00 UTC
Thanks Matthias.  I just couldn't find the time to learn glib (which I've never actually used at all for anything) and get the patch right.

Especially since, for some odd reason, I never seem to hit this bug anymore (I don't think I've had an Evo crash related to this since May or so); I wonder if the Evo guys reworked the code to avoid the situation, or if I was just lucky.

Still, it will be excellent to get this resolved.
Comment 37 Claudio Saavedra 2008-09-28 18:41:37 UTC
*** Bug 554210 has been marked as a duplicate of this bug. ***
Comment 38 Claudio Saavedra 2008-09-28 18:45:57 UTC
*** Bug 519444 has been marked as a duplicate of this bug. ***
Comment 39 Claudio Saavedra 2008-09-28 18:46:39 UTC
*** Bug 478585 has been marked as a duplicate of this bug. ***
Comment 40 Claudio Saavedra 2008-09-28 18:47:48 UTC
*** Bug 480380 has been marked as a duplicate of this bug. ***
Comment 41 Claudio Saavedra 2008-09-28 18:51:20 UTC
*** Bug 492041 has been marked as a duplicate of this bug. ***
Comment 42 Philip Withnall 2008-09-28 19:17:58 UTC
*** Bug 495591 has been marked as a duplicate of this bug. ***
Comment 43 Philip Withnall 2008-09-28 19:18:31 UTC
*** Bug 503690 has been marked as a duplicate of this bug. ***
Comment 44 Philip Withnall 2008-09-28 19:18:42 UTC
*** Bug 504882 has been marked as a duplicate of this bug. ***
Comment 45 Philip Withnall 2008-09-28 19:18:50 UTC
*** Bug 507058 has been marked as a duplicate of this bug. ***
Comment 46 Philip Withnall 2008-09-28 19:18:58 UTC
*** Bug 509548 has been marked as a duplicate of this bug. ***
Comment 47 Philip Withnall 2008-09-28 19:19:07 UTC
*** Bug 509639 has been marked as a duplicate of this bug. ***
Comment 48 Philip Withnall 2008-09-28 19:19:14 UTC
*** Bug 510696 has been marked as a duplicate of this bug. ***
Comment 49 Philip Withnall 2008-09-28 19:19:24 UTC
*** Bug 514369 has been marked as a duplicate of this bug. ***
Comment 50 Felix Riemann 2008-10-08 09:46:16 UTC
*** Bug 555479 has been marked as a duplicate of this bug. ***
Comment 51 Jonathan Matthew 2008-10-20 21:26:09 UTC
*** Bug 556923 has been marked as a duplicate of this bug. ***
Comment 52 Akhil Laddha 2008-10-31 04:53:41 UTC
*** Bug 558573 has been marked as a duplicate of this bug. ***
Comment 53 Jonathan Matthew 2008-11-02 00:43:07 UTC
*** Bug 558861 has been marked as a duplicate of this bug. ***
Comment 54 Jonathan Matthew 2008-11-02 00:43:44 UTC
*** Bug 558862 has been marked as a duplicate of this bug. ***
Comment 55 Felix Riemann 2008-11-06 10:50:43 UTC
*** Bug 559565 has been marked as a duplicate of this bug. ***
Comment 56 Jonathan Matthew 2008-11-11 02:45:42 UTC
*** Bug 541639 has been marked as a duplicate of this bug. ***
Comment 57 Felix Riemann 2008-11-27 16:35:33 UTC
*** Bug 562463 has been marked as a duplicate of this bug. ***
Comment 58 Akhil Laddha 2008-12-31 05:24:11 UTC
*** Bug 556999 has been marked as a duplicate of this bug. ***
Comment 59 Akhil Laddha 2009-01-20 03:58:58 UTC
*** Bug 568306 has been marked as a duplicate of this bug. ***
Comment 60 Akhil Laddha 2009-01-20 03:59:07 UTC
*** Bug 551257 has been marked as a duplicate of this bug. ***
Comment 61 Akhil Laddha 2009-01-20 03:59:18 UTC
*** Bug 534060 has been marked as a duplicate of this bug. ***
Comment 62 Akhil Laddha 2009-01-20 04:00:32 UTC
*** Bug 552337 has been marked as a duplicate of this bug. ***
Comment 63 Akhil Laddha 2009-01-20 04:00:59 UTC
*** Bug 554231 has been marked as a duplicate of this bug. ***
Comment 64 Akhil Laddha 2009-01-20 04:01:21 UTC
*** Bug 554449 has been marked as a duplicate of this bug. ***
Comment 65 Akhil Laddha 2009-01-20 04:01:56 UTC
*** Bug 556525 has been marked as a duplicate of this bug. ***
Comment 66 Felix Riemann 2009-01-27 11:40:21 UTC
*** Bug 569256 has been marked as a duplicate of this bug. ***
Comment 67 Akhil Laddha 2009-02-20 03:38:11 UTC
*** Bug 572375 has been marked as a duplicate of this bug. ***
Comment 68 Akhil Laddha 2009-02-20 03:38:21 UTC
*** Bug 485489 has been marked as a duplicate of this bug. ***
Comment 69 Akhil Laddha 2009-02-20 03:38:38 UTC
*** Bug 510370 has been marked as a duplicate of this bug. ***
Comment 70 Akhil Laddha 2009-02-20 03:41:15 UTC
*** Bug 572472 has been marked as a duplicate of this bug. ***
Comment 71 Akhil Laddha 2009-03-06 03:54:30 UTC
*** Bug 574262 has been marked as a duplicate of this bug. ***
Comment 72 Akhil Laddha 2009-03-12 08:21:05 UTC
*** Bug 574997 has been marked as a duplicate of this bug. ***
Comment 73 palfrey 2009-03-17 17:34:56 UTC
*** Bug 575716 has been marked as a duplicate of this bug. ***
Comment 74 Akhil Laddha 2009-04-06 06:59:06 UTC
*** Bug 577148 has been marked as a duplicate of this bug. ***
Comment 75 Felix Riemann 2009-04-06 19:31:30 UTC
*** Bug 578156 has been marked as a duplicate of this bug. ***
Comment 76 Akhil Laddha 2009-04-07 11:33:39 UTC
*** Bug 577665 has been marked as a duplicate of this bug. ***
Comment 77 Akhil Laddha 2009-05-04 04:11:27 UTC
*** Bug 581069 has been marked as a duplicate of this bug. ***
Comment 78 Akhil Laddha 2009-05-06 03:17:46 UTC
*** Bug 581471 has been marked as a duplicate of this bug. ***
Comment 79 Akhil Laddha 2009-05-07 04:23:26 UTC
*** Bug 581646 has been marked as a duplicate of this bug. ***
Comment 80 Akhil Laddha 2009-05-18 04:49:27 UTC
*** Bug 582709 has been marked as a duplicate of this bug. ***
Comment 81 Akhil Laddha 2009-05-20 06:15:24 UTC
*** Bug 479996 has been marked as a duplicate of this bug. ***
Comment 82 Akhil Laddha 2009-05-20 06:20:14 UTC
*** Bug 484068 has been marked as a duplicate of this bug. ***
Comment 83 Akhil Laddha 2009-05-28 06:13:51 UTC
*** Bug 418069 has been marked as a duplicate of this bug. ***
Comment 84 Akhil Laddha 2010-01-15 03:56:23 UTC
*** Bug 553618 has been marked as a duplicate of this bug. ***