evolution hangs, 100% cpu, apparently in gtk html lib
Bug #347225 reported by
Noam Lewis
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
GtkHTML |
Expired
|
Critical
|
|||
gtkhtml3.14 (Ubuntu) |
Invalid
|
Medium
|
Ubuntu Desktop Bugs |
Bug Description
Binary package hint: evolution
I was composing a reply to a message when hitting some key suddenly caused evolution to go 100% cpu and to hang.
When I debug with gdb, breaking stops at different functions in gtk-html every time (html_text_
I've attached gdb logs. What else can help?
ProblemType: Bug
Architecture: i386
DistroRelease: Ubuntu 8.10
ExecutablePath: /usr/bin/evolution
Package: evolution 2.24.3-0ubuntu1
ProcEnviron:
PATH=/
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: evolution
Uname: Linux 2.6.27-11-generic i686
Changed in gtkhtml: | |
status: | Unknown → New |
Changed in gtkhtml: | |
status: | New → Incomplete |
Changed in gtkhtml: | |
importance: | Unknown → Critical |
status: | Invalid → Expired |
To post a comment you must log in.
Firstly, I was about to attach a core dump but realized that it probably contains sensitive information (this is my email client...) I'm leaving the process alive (being traced) for a while, if you have any ideas of things i can do to find the bug. htmlcursor. c: line ~1211)
Secondly, Apparently it's stuck in this function, in the while (1) loop: (gtkhtml/
(Using: libgtkhtml - gtkhtml3. 14-3.24. 1.1.)
static gboolean right_edge_ of_line (HTMLCursor *cursor, HTMLEngine *engine)
html_cursor_
{
HTMLCursor prev_cursor;
gint x, y, prev_y;
g_return_ val_if_ fail (cursor != NULL, FALSE); val_if_ fail (engine != NULL, FALSE); val_if_ fail (HTML_IS_ENGINE (engine), FALSE);
g_return_
g_return_
gtk_html_im_reset (engine->widget);
cursor- >have_target_ x = FALSE;
if (engine- >need_spell_ check) engine_ spell_check_ range (engine, engine->cursor, engine->cursor);
html_
html_cursor_copy (&prev_cursor, cursor); get_cursor_ base (cursor->object, engine->painter, cursor->offset,
html_object_
&x, &prev_y);
while (1) {
if (! right_in_flow (cursor, engine))
return TRUE;
html_ object_ get_cursor_ base (cursor->object, engine->painter, cursor->offset,
&x, &y);
if (y - cursor- >object- >ascent > prev_y + prev_cursor. object- >descent - 1) {
html_cursor_copy (cursor, &prev_cursor);
return TRUE;
}
prev_y = y;
html_cursor_copy (&prev_cursor, cursor);
}
}