[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