[Ekiga-devel-list] Call history view bug, GmCellRendererBitext and gtk+


this is the tale of a bug hunt. It doesn't end as well as I would like.

A strange bug, in fact: at startup, Eugen only sees one line per entry in his call history ; it becomes better only later. At startup, Julien (me) has one line and a half par entry (and it doesn't get better later because of the infamous clutter crash). The common problem is that two full lines should be there.

So there might be something wrong with the initial population of the view, so the first thing is to try to print what data the call history view receives ; and the answer is : the engine part works! Only the view is to blame.

So what exactly do we use to display that information, since obviously that is where the fault lies? The GmCellRendererBitext class, which is inheriting from GtkCellRendererText. If there's only one and a half line per entry, then that means that entries are overlapping, and that points to a problem with the get_size in that code.

But why does it fail in the call history view and not in the roster view? In both case, our renderer is to the right of a pixbuf renderer. But in the roster view, the images are quite big images, while in the call history, those images are quite small. So in both cases, the size of our renderer in wrong, but in the roster, the presence of the big images means the lines are tall enough and there is no overlapping anyway.

So I just had to fix the size computation. Unfortunately it turns out our gm_cell_renderer_bitext_get_size method wasn't called, ever. It's deprecated in gtk+ 3.<something>! There is some provision in the code to still call the obsolete api, but it apparently doesn't work.

So yesterday I just added a few methods of the new api to detect the sizes, and committed that because it fixed the display problem (yes, I ran ekiga, and no, I didn't test calling because of the clutter crash). That made Eugen unhappy: I had added dozens of lines of code... and now it crashed after a while! Indeed, I was able to reproduce the crash.

So today I made another try, this time trying to rework the code to be much, much simpler. In fact, I removed much of the code, trying to use as much as possible the underlying GtkCellRendererText class to avoid any problem.

The code is simpler code, but even yesterday's code shouldn't have crashed, and did ; the dirty secret is a two year old bug:

As you can see with the sample code in comment #8, there are simple uses of the gtk+ code which can easily give crashes. The fix from yesterday (fix for the display issues) was apparently putting us in exactly the right conditions to trigger the bug.

The commit I pushed today has simplified the code much, and it looks like it doesn't trigger the crash... at least not as much, but I can hardly guarantee anything.

That is were things stand for now: the good news is that the display bug is gone and the code is (much) lighter and simpler... but we know there is a crashing bug lurking :-/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]