[sylpheed:34530] SEGV when going offline while receiving a folder summary

NODA, Kai nodakai at gmail.com
Sat Apr 9 18:38:13 JST 2011


Hello, Yamamoto-san.

As a years-long fan of Sylpheed, I submit a bug report to you
hoping that this will be of some help...

Reading a summary from a large IMAP folder often takes tens of seconds.
If you click the "go offline" button before it finishes, Sylpheed dies with SEGV
with 100 % reproducibility.
I guess the SSL connection (SSL *ssl) is invalidated through the GUI thread
while another thread reading a folder summary still needs it.

Here's a transcript:
$ uname -a
Linux zbox 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 x86_64 GNU/Linux
$ LANG=C svn info
Path: .
URL: svn://sylpheed.sraoss.jp/sylpheed/trunk
Repository Root: svn://sylpheed.sraoss.jp/sylpheed
Repository UUID: ee746299-78ed-0310-b773-934348b2243d
Revision: 2867
Node Kind: directory
Schedule: normal
Last Changed Author: hiro
Last Changed Rev: 2867
Last Changed Date: 2011-03-22 10:49:53 +0900 (Tue, 22 Mar 2011)

$ src/sylpheed &
$ gdb src/.libs/lt-sylpheed 3784
[snip]
(gdb) cont
Continuing.
[New Thread 0x7f7d77797700 (LWP 4256)]

[ 1. Click a folder containing lots of new mails from the tree view
  2. Sylpheed issues "UID FETCH 1:* (UID FLAGS RFC822.SIZE RFC822.HEADER)"
  3. Click the "offline" button before all fetching completes
  4. then... ]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f7d77797700 (LWP 4256)]
0x00007f7d82f34fc0 in ssl3_read_n () from /usr/lib/libssl.so.0.9.8
(gdb) thr app all bt

Thread 2 (Thread 0x7f7d77797700 (LWP 4256)):
#0  0x00007f7d82f34fc0 in ssl3_read_n () from /usr/lib/libssl.so.0.9.8
#1  0x00007f7d82f3553f in ssl3_read_bytes () from /usr/lib/libssl.so.0.9.8
#2  0x00007f7d82f31ccd in ssl3_peek () from /usr/lib/libssl.so.0.9.8
#3  0x00007f7d833e072b in ssl_peek (ssl=0x2d974e0, buf=0x7f7d77790a55 ".com>\r\n", len=8154) at socket.c:1800
#4  0x00007f7d833e02df in ssl_gets (ssl=0x2d974e0, buf=0x7f7d77790a30 "List-Unsubscribe: <http://groups.goog.com>\r\n",
    len=8154) at socket.c:1690
#5  0x00007f7d833e05a5 in ssl_getline (ssl=0x2d974e0, line=0x7f7d77794aa8) at socket.c:1750
#6  0x00007f7d833e065b in sock_getline (sock=0x2cdfc10, line=0x7f7d77794aa8) at socket.c:1775
#7  0x00007f7d833b520d in imap_get_header (session=0x2d9a010,
    cur_pos=0x2dcdba0 "Delivered-To: nodakai at gmail.com\r\nReceived: by 10.229.81.66 with SMTP id w2cs136701qck; Fri, 19 Feb 2010\r\n 04:54:21 -0800 (PST)\r\nReceived-SPF: pass (google.com: domain of\r\n 394l-SwoJBUs6.5.znrqr4tznvy."...,
    headers=0x7f7d77794b08, str=0x2cfb9a0) at imap.c:3222
#8  0x00007f7d833b5c50 in imap_parse_envelope (session=0x2d9a010, item=0x2d58470, line_str=0x2cfb9a0) at imap.c:3387
#9  0x00007f7d833b3b60 in imap_get_uncached_messages_func (session=0x2d9a010, data=0x7fffbdc76990) at imap.c:2727
#10 0x00007f7d833ba6ba in imap_thread_run_proxy (push_data=0x2d9a010, data=0x2d9a010) at imap.c:5014
#11 0x00007f7d824e5d7f in ?? () from /lib/libglib-2.0.so.0
#12 0x00007f7d824e3ea4 in ?? () from /lib/libglib-2.0.so.0
#13 0x00007f7d822618ba in start_thread (arg=<value optimized out>) at pthread_create.c:300
#14 0x00007f7d81fc902d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#15 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f7d86154920 (LWP 3784)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162
#1  0x00007f7d824e58b0 in g_thread_pool_free () from /lib/libglib-2.0.so.0
#2  0x00007f7d833ae2e6 in imap_session_destroy (session=0x2d9a010) at imap.c:779
#3  0x00007f7d833d9fd2 in session_destroy (session=0x2d9a010) at session.c:287
#4  0x00007f7d833a6b7a in folder_remote_folder_destroy_all_sessions () at folder.c:176
#5  0x0000000000427fb6 in online_switch_clicked (widget=0x2a2a190, data=0x2912ba0) at mainwindow.c:3092
#6  0x00007f7d83a2d14e in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#7  0x00007f7d83a45617 in ?? () from /usr/lib/libgobject-2.0.so.0
#8  0x00007f7d83a46c96 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#9  0x00007f7d83a471e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#10 0x00007f7d859d0c25 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#11 0x00007f7d83a2d14e in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#12 0x00007f7d83a44ee1 in ?? () from /usr/lib/libgobject-2.0.so.0
#13 0x00007f7d83a46c96 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#14 0x00007f7d83a471e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#15 0x00007f7d859cf92d in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#16 0x00007f7d85a7ec38 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#17 0x00007f7d83a2d14e in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#18 0x00007f7d83a45260 in ?? () from /usr/lib/libgobject-2.0.so.0
#19 0x00007f7d83a46add in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#20 0x00007f7d83a471e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#21 0x00007f7d85b968af in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#22 0x00007f7d85a770a3 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#23 0x00007f7d85a7815b in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#24 0x00007f7d856e760c in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#25 0x00007f7d824ba2a2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#26 0x00007f7d824be968 in ?? () from /lib/libglib-2.0.so.0
#27 0x00007f7d824beb1c in g_main_context_iteration () from /lib/libglib-2.0.so.0
#28 0x00007f7d85a784a1 in gtk_main_iteration () from /usr/lib/libgtk-x11-2.0.so.0
#29 0x000000000041fdc1 in event_loop_iteration_func () at main.c:698
#30 0x00007f7d833ec957 in event_loop_iterate () at utils.c:4430
#31 0x00007f7d833ba9cb in imap_thread_run_progress (session=0x2d9a010, func=0x7f7d833b3906 <imap_get_uncached_messages_func>,
    progress_func=0x7f7d833b38b9 <imap_get_uncached_messages_progress_func>, data=0x7fffbdc76990) at imap.c:5091
#32 0x00007f7d833b3e6d in imap_get_uncached_messages (session=0x2d9a010, item=0x2d58470, first_uid=0, last_uid=0, exists=604,
    update_count=1) at imap.c:2791
#33 0x00007f7d833af34d in imap_get_msg_list_full (folder=0x2d56fa0, item=0x2d58470, use_cache=0, uncached_only=0) at imap.c:1167
#34 0x00007f7d833af56d in imap_get_msg_list (folder=0x2d56fa0, item=0x2d58470, use_cache=1) at imap.c:1224
#35 0x00007f7d833a922b in folder_item_get_msg_list (item=0x2d58470, use_cache=1) at folder.c:1146
#36 0x000000000043465b in summary_show (summaryview=0x2a6ee00, item=0x2d58470, update_cache=0) at summaryview.c:800
#37 0x000000000042fc5e in folderview_selection_changed (selection=0x2a3f6c0, folderview=0x2a3d200) at folderview.c:2096
#38 0x00007f7d83a2d14e in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#39 0x00007f7d83a45617 in ?? () from /usr/lib/libgobject-2.0.so.0
#40 0x00007f7d83a46c96 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#41 0x00007f7d83a471e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#42 0x00007f7d85b7a342 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#43 0x00007f7d85b840e0 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#44 0x00007f7d85a7ec38 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#45 0x00007f7d83a2d14e in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#46 0x00007f7d83a45260 in ?? () from /usr/lib/libgobject-2.0.so.0
#47 0x00007f7d83a46add in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#48 0x00007f7d83a471e3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#49 0x00007f7d85b968af in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#50 0x00007f7d85a770a3 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#51 0x00007f7d85a7815b in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#52 0x00007f7d856e760c in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#53 0x00007f7d824ba2a2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#54 0x00007f7d824be968 in ?? () from /lib/libglib-2.0.so.0
#55 0x00007f7d824bee75 in g_main_loop_run () from /lib/libglib-2.0.so.0
#56 0x00007f7d85a785f7 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#57 0x000000000041f43a in main (argc=1, argv=0x7fffbdc779e8) at main.c:366
(gdb) up 3
#3  0x00007f7d833e072b in ssl_peek (ssl=0x2d974e0, buf=0x7f7d77790a55 ".com>\r\n", len=8154) at socket.c:1800
1800            ret = SSL_peek(ssl, buf, len);
(gdb) list
1795            if (SSL_pending(ssl) == 0) {
1796                    if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
1797                            return -1;
1798            }
1799
1800            ret = SSL_peek(ssl, buf, len);
1801
1802            switch ((err = SSL_get_error(ssl, ret))) {
1803            case SSL_ERROR_NONE:
1804                    return ret;

Thanks,

-- 
NODA, Kai <nodakai at gmail.com>


More information about the Sylpheed mailing list