[Users] [Bug 2870] New: 100% CPU; CM non-responsive

noreply at thewildbeast.co.uk noreply at thewildbeast.co.uk
Sat Feb 2 20:54:15 CET 2013


http://www.thewildbeast.co.uk/claws-mail/bugzilla/show_bug.cgi?id=2870

            Bug ID: 2870
           Summary: 100% CPU; CM non-responsive
    Classification: Unclassified
           Product: Claws Mail
           Version: CVS
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P3
         Component: Plugins/Gtkhtml2 Viewer
          Assignee: users at lists.claws-mail.org
          Reporter: pf at pfortin.com

Created attachment 1224
  -->
http://www.thewildbeast.co.uk/claws-mail/bugzilla/attachment.cgi?id=1224&action=edit
valgrind output

3.9.0cvs51

Viewing a new message; but when I click on icon to view HTML, CM goes into 100%
CPU.  (Who wants the message privately?)

The message content where CM starts 100% CPU loop (100% reproducible) is:
 td[class=3D"hero-cell"] {=20
padding: 0 0 30px !important;=20
}=20
 td[class=3D"content-cell"] {=20
display: block !important;=20
padding: 0 0 2px 0 !important;=20
width: 300px !important;=20            <=== loop occurs after "!importa"
}=20
 td[class=3D"content-cell-top"] {=20
display: block !important;=20
padding: 0 !important;=20
width: 300px !important;=20
}=20
 td[class=3D"content-cell-bottom"] {=20
display: block !important;=20
padding: 0 !important;=20
width: 300px !important;=20
}=20


valgrind attachment may be more valuable than below which is what I found
before using valgrind....

============ gory details follow ==============


11:51:20 $ top -n 1   # redacted
12692 pfortin   20   0 1072m  72m  21m R  100  0.9   8:02.45 claws-mail
11:52:12 $ top -n 1
12692 pfortin   20   0 1074m  73m  21m R  100  0.9   8:44.08 claws-mail
# Mostly stopped while researching/debugging....
13:19:27 $ top -n 1
12692 pfortin   20   0 1076m  76m  21m R   98  1.0  10:00.86 claws-mail

Tracked it down to plugins/gtkhtml2_viewer/libgtkhtml/css/cssvalue.c:152
                while (tmp_entry->next) {
                        tmp_entry = tmp_entry->next;
                }

strace showed only this...  there was about 5-6 seconds between each brk.
$ strace -p 12692
Process 12692 attached - interrupt to quit
brk(0x447f000)                          = 0x447f000
brk(0x44a0000)                          = 0x44a0000  <===  +0x21000
brk(0x44c1000)                          = 0x44c1000            "
brk(0x44e2000)                          = 0x44e2000            "
brk(0x4503000)                          = 0x4503000            "
brk(0x4524000)                          = 0x4524000            "
brk(0x4545000)                          = 0x4545000            "


gdb shows this loop...

(gdb)stepi
152                     while (tmp_entry->next) {
1: tmp_entry->next = (CssValueEntry *) 0x44b2fc0  <=== +0x40 each iteration
(gdb)
0x00007f5c383d0383      152                     while (tmp_entry->next) {
1: tmp_entry->next = (CssValueEntry *) 0x44b3000
(gdb)
0x00007f5c383d0387      152                     while (tmp_entry->next) {
1: tmp_entry->next = (CssValueEntry *) 0x44b3000
(gdb)
0x00007f5c383d038a      152                     while (tmp_entry->next) {
1: tmp_entry->next = (CssValueEntry *) 0x44b3000
(gdb)
152                     while (tmp_entry->next) {  <=== same as above
1: tmp_entry->next = (CssValueEntry *) 0x44b3000
(gdb) bt
#0  css_value_list_append (list=0x3acb620, element=<optimized out>,
list_sep=<optimized out>) at cssvalue.c:152
#1  0x00007f5c383cfad8 in css_parser_parse_atkeyword (base_url=0x0,
ret_val=<synthetic pointer>, end_pos=999, start_pos=<optimized out>, buffer=
    0x2d57400 "\n at charset \"utf-8\"; \n.ReadMsgBody { \n width: 100%; \n}
\n.ExternalClass { \n width: 100%; \n} \nimg.banner { \n margin-left: 0
!important; \n margin-right: 0 !important; \n} \ntd { \n font-family: Arial,
Helveti"...) at cssparser.c:1274
#2  css_parser_parse_stylesheet (str=<optimized out>, len=<optimized out>,
base_url=<optimized out>) at cssparser.c:1505
#3  0x00007f5c383d1648 in html_document_node_inserted_traverser
(document=0x1949a40, node=0x34dc160) at htmldocument.c:281
#4  0x00007f5c383d1c01 in html_document_new_node (parser=<optimized out>,
node=0x34dc160, document=0x1949a40) at htmldocument.c:530
#5  0x00007f5c425d3354 in g_cclosure_marshal_VOID__OBJECTv () from
/lib64/libgobject-2.0.so.0
#6  0x00007f5c425cfeca in ?? () from /lib64/libgobject-2.0.so.0
#7  0x00007f5c425e8711 in g_signal_emit_valist () from
/lib64/libgobject-2.0.so.0
#8  0x00007f5c425e9212 in g_signal_emit () from /lib64/libgobject-2.0.so.0
#9  0x00007f5c3e6ca0f9 in ?? () from /usr/lib64/libxml2.so.2
#10 0x00007f5c3e6cfafd in htmlParseChunk () from /usr/lib64/libxml2.so.2
#11 0x00007f5c383f5bd9 in html_stream_write (stream=0x37c90a0,
buffer=<optimized out>, size=10) at htmlstream.c:85
#12 0x00007f5c383c70da in gtkhtml2_show_mimepart_real (_viewer=0x2cf1730) at
gtkhtml2_viewer.c:323
#13 0x00007f5c4231478b in ?? () from /lib64/libglib-2.0.so.0
#14 0x00007f5c42313bc3 in g_main_context_dispatch () from
/lib64/libglib-2.0.so.0
#15 0x00007f5c42313f10 in ?? () from /lib64/libglib-2.0.so.0
#16 0x00007f5c4231430a in g_main_loop_run () from /lib64/libglib-2.0.so.0
#17 0x00007f5c45ee9d57 in gtk_main () from /usr/lib64/libgtk-x11-2.0.so.0
#18 0x00000000004474c1 in main (argc=1, argv=0x7fffaa37f2a8) at main.c:1710
(gdb)

Registers....  each time through the loop, only rcx & rdx change (+0x40)
(gdb) info r
rax            0x4c82780        80226176
rbx            0x3acb620        61650464
rcx            0x2d6c5a0        47629728   <===
rdx            0x2d6c5a0        47629728   <===
rsi            0x4c82760        80226144
rdi            0x4      4
rbp            0x2a64a40        0x2a64a40
rsp            0x7fffaa37c2c0   0x7fffaa37c2c0
r8             0x18     24
r9             0x8      8
r10            0x0      0
r11            0x206    518
r12            0x3e7    999
r13            0x3acb620        61650464
r14            0x166    358
r15            0x0      0
rip            0x7f5c383d0383   0x7f5c383d0383 <css_value_list_append+83>
eflags         0x206    [ PF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
(gdb)




**************************************************************
Trying to kill CM with ^C is ignored, as is window close, until KDE offers to
terminate it.

Restarted with "claws-mail --debug". When I clicked on the HTML viewer icon,
got this on the console:

mimeview.c:854:text/html
gtkhtml2_viewer.c:1219:gtkhtml2_viewer_create
gtkhtml2_viewer.c:1253:setting minimum size to 9.00 (overriding 8.00)
gtkhtml2_viewer.c:131:gtkhtml2_get_widget: 0x27b8b60
gtkhtml2_viewer.c:131:gtkhtml2_get_widget: 0x27b8b60
gtkhtml2_viewer.c:261:gtkhtml2_show_mimepart
gtkhtml2_viewer.c:291:using charset ISO-8859-1
Unhandled property: 324 -webkit-text-size-adjust

(claws-mail:25605): HtmlCss-WARNING **: Unhandled keyword 210 - 
@charset "utf-8"; 
.ReadMsgBody { 
 width: 100%; 
}
.ExternalClass {
 width: 100%;
}
img.banner {
 margin-left: 0 !important;
 margin-right: 0 !important;
}
td {
 font-family: Arial, Helvetica, sans-serif;
 font-size: 12px;
 line-height: 1.231;
 border-collapse: collapse;
}
a {
 color:#0078c9;
}
 @media only screen and (max-width: 480px) {
 td[id="pre-header"] {
font-size: 9px !important;
}
 table[class="table"] {
width: 300px !important;
max-width: 300px !important;
display: block !important;
padding: 0 !important;
table-layout: fixed !important;
margin:0px !important;
}
 table[class="table-center"] {
width: 300px !important;
max-width: 300px !important;
display: block !important;
padding: 0 !important;
table-layout: fixed !important;
margin:0px !important;
text-align:center;
}
 td[class="hero-cell"] {
padding: 0 0 30px !important;
}
 td[class="content-cell"] {
display: block !important;
padding: 0 0 2px 0 !important;
width: 300px !importa



######################################  ^C returned this; but did not quit...
^Cmain.c:2855:Quitting on signal 2

Moving on to valgrind....   see attachment....

-- 
You are receiving this mail because:
You are the assignee for the bug.



More information about the Users mailing list