[Pidgin] #7538: libpurple crash in dbus
Pidgin
trac at pidgin.im
Thu Nov 13 11:23:17 EST 2008
#7538: libpurple crash in dbus
------------------+---------------------------------------------------------
Reporter: kir | Type: patch
Status: new | Component: libpurple
Version: 2.5.2 | Keywords: dbus sigsegv
------------------+---------------------------------------------------------
I am noticing crashes of pidgin-2.5.2 (comes from fedora 9 updates repo)
which happen randomly.
Here is the gdb backtrace:
{{{
$ gdb pidgin
GNU gdb Fedora (6.8-23.fc9)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu"...
(gdb) r
Starting program: /usr/bin/pidgin
[Thread debugging using libthread_db enabled]
[New Thread 0x7ffd6683a740 (LWP 6267)]
Detaching after fork from child process 6271.
Detaching after fork from child process 6272.
Detaching after fork from child process 6273.
Detaching after fork from child process 6274.
Detaching after fork from child process 6275.
[New Thread 0x412ea950 (LWP 6277)]
[New Thread 0x41ceb950 (LWP 6278)]
[New Thread 0x426ec950 (LWP 6279)]
[New Thread 0x430ed950 (LWP 6280)]
[Thread 0x430ed950 (LWP 6280) exited]
[Thread 0x426ec950 (LWP 6279) exited]
[Thread 0x41ceb950 (LWP 6278) exited]
[Thread 0x412ea950 (LWP 6277) exited]
[New Thread 0x412ea950 (LWP 6335)]
Program received signal SIGSEGV, Segmentation fault.
_dbus_watch_invalidate (watch=0x0) at dbus-watch.c:147
147 watch->fd = -1;
Missing separate debuginfos, use: debuginfo-install gtk-nodoka-
engine.x86_64
postgresql.x86_64 xmms.x86_64
(gdb) bt full
#0 _dbus_watch_invalidate (watch=0x0) at dbus-watch.c:147
No locals.
#1 0x0000003908023a50 in free_watches (transport=<value optimized out>)
at dbus-transport-socket.c:82
No locals.
#2 0x0000003908023ab9 in socket_disconnect (transport=<value optimized
out>)
at dbus-transport-socket.c:908
No locals.
#3 0x0000003908021957 in _dbus_transport_disconnect (
transport=<value optimized out>) at dbus-transport.c:494
No locals.
#4 0x00000039080223c2 in _dbus_transport_queue_messages (
transport=<value optimized out>) at dbus-transport.c:1137
status = <value optimized out>
#5 0x000000390800eb06 in _dbus_connection_get_dispatch_status_unlocked (
connection=<value optimized out>) at dbus-connection.c:3983
No locals.
#6 0x000000390800f19e in dbus_connection_get_dispatch_status (
connection=<value optimized out>) at dbus-connection.c:4114
status = <value optimized out>
__FUNCTION__ = "dbus_connection_get_dispatch_status"
#7 0x00000038ed409743 in message_queue_prepare (source=<value optimized
out>,
timeout=<value optimized out>) at dbus-gmain.c:82
---Type <return> to continue, or q <return> to quit---
connection = <value optimized out>
#8 0x00000038e583a4ea in IA__g_main_context_prepare (
context=<value optimized out>, priority=<value optimized out>)
at gmain.c:2332
result = <value optimized out>
prepare = <value optimized out>
source_timeout = <value optimized out>
i = <value optimized out>
n_ready = <value optimized out>
current_priority = <value optimized out>
source = <value optimized out>
#9 0x00000038e583a90a in g_main_context_iterate (
context=<value optimized out>, block=<value optimized out>,
dispatch=<value optimized out>, self=<value optimized out>) at
gmain.c:2625
max_priority = <value optimized out>
timeout = <value optimized out>
some_ready = <value optimized out>
nfds = <value optimized out>
allocated_nfds = <value optimized out>
fds = <value optimized out>
__PRETTY_FUNCTION__ = "g_main_context_iterate"
#10 0x00000038e583b13d in IA__g_main_loop_run (loop=<value optimized out>)
at gmain.c:2853
---Type <return> to continue, or q <return> to quit---
self = <value optimized out>
__PRETTY_FUNCTION__ = "IA__g_main_loop_run"
#11 0x00000038ead83db0 in IA__gtk_main () at gtkmain.c:1163
tmp_list = Could not find the frame base for "IA__gtk_main".
functions = Could not find the frame base for "IA__gtk_main".
init = Could not find the frame base for "IA__gtk_main".
loop = Could not find the frame base for "IA__gtk_main".
#12 0x000000000048424b in main (argc=1, argv=0x7fff6eb87ee8) at
gtkmain.c:888
opt_help = <value optimized out>
opt_login = 0
opt_nologin = 0
opt_version = <value optimized out>
opt_si = 1
opt_config_dir_arg = 0x0
opt_login_arg = 0x0
opt_session_arg = 0x0
search_path = <value optimized out>
accounts = <value optimized out>
sigset = {__val = {82951, 0 <repeats 15 times>}}
prev_sig_disp = (void (*)(int)) 0x1
errmsg =
"(\224��8\000\000\000\n\000\000\000\000\000\000\000\000��f�\177\000\000\215�\000�3",
'\0' <repeats 27 times>,
"\026�\000�3\000\000\000@|�n�\177\000\000P�\000�3\000\000\000\177|�n�\177\000\000\000\000\000\000\000\000\000\000
---Type
<return> to continue, or q <return> to quit---
\210�\203f�\177\000\000��\000�3\000\000\000\000��f�\177\000\000���f�\177\000\000\230��f�\177\000\000\000еf�\177\000\000\000P\204f�\177\000\000pi\204f�\177\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000��f�\177\000\000\000\000\000�p���\000\000��\001jg\000\000\000\000\000\000\000\000\000\b\224��8\000\000\000\b"...
segfault_message_tmp = <value optimized out>
error = (GError *) 0x0
opt = <value optimized out>
gui_check = <value optimized out>
debug_enabled = <value optimized out>
migration_failed = <value optimized out>
active_accounts = <value optimized out>
long_options = {{name = 0x4cea82 "config", has_arg = 1, flag = 0x0,
val = 99}, {name = 0x4bbeb6 "debug", has_arg = 0, flag = 0x0, val =
100}, {
name = 0x4bfdb1 "help", has_arg = 0, flag = 0x0, val = 104}, {
name = 0x4bc16e "login", has_arg = 2, flag = 0x0, val = 108}, {
name = 0x4ca9d0 "multiple", has_arg = 0, flag = 0x0, val = 109}, {
name = 0x4ca9d9 "nologin", has_arg = 0, flag = 0x0, val = 110}, {
name = 0x4ca9e1 "nocrash", has_arg = 0, flag = 0x0, val = 120}, {
name = 0x4cea78 "session", has_arg = 1, flag = 0x0, val = 115}, {
name = 0x4c1baa "version", has_arg = 0, flag = 0x0, val = 118}, {
name = 0x4cea8b "display", has_arg = 1, flag = 0x0, val = 68}, {
name = 0x4ca9e9 "sync", has_arg = 0, flag = 0x0, val = 83}, {name =
0x0,
---Type <return> to continue, or q <return> to quit---
has_arg = 0, flag = 0x0, val = 0}}
(gdb)
}}}
Apparently this happens because my desktop is core2duo (i.e. SMP) and
libpurple didn't call dbus_g_thread_init (). Here is an excerpt from dbus
docs:
{{{
void dbus_g_thread_init (void);
Initializes the D-BUS thread system. This function may only be called once
and must be called prior to calling any other function in the D-BUS API.
}}}
Patch fixing this will follow.
PS I have also filed a bug to Fedora,
https://bugzilla.redhat.com/show_bug.cgi?id=471410
--
Ticket URL: <http://developer.pidgin.im/ticket/7538>
Pidgin <http://pidgin.im>
Pidgin
More information about the Tracker
mailing list