[Pidgin] #4815: Crash on repeated disconnection with different errors

Pidgin trac at pidgin.im
Sat Feb 9 11:31:06 EST 2008


#4815: Crash on repeated disconnection with different errors
--------------------------+-------------------------------------------------
 Reporter:  nosnilmot     |       Owner:  resiak
     Type:  defect        |      Status:  new   
 Priority:  minor         |   Milestone:        
Component:  unclassified  |     Version:        
 Keywords:                |     Pending:  0     
--------------------------+-------------------------------------------------
 If an account is discconnected twice, but with different error messages,
 pidgin crashes. For example, when restarting my XMPP server I get 1st
 disconnect with "Server Shutdown", 2nd one "Connection refused".

 I suspect a race of some sort where account-error-changed signal handlers
 reset the account's current_error (because the old mini dialog is
 destroyed?), and then the thing that fired the signal goes boom. my
 attempts to fix only resulted in total loss of the updated mini dialog
 though.

 Backtrace:
 {{{
 (gdb) bt full
 #0  0x00110402 in __kernel_vsyscall ()
 No symbol table info available.
 #1  0x00515fa0 in raise () from /lib/libc.so.6
 No symbol table info available.
 #2  0x005178b1 in abort () from /lib/libc.so.6
 No symbol table info available.
 #3  0x080c2012 in sighandler (sig=11) at gtkmain.c:220
 No locals.
 #4  <signal handler called>
 No symbol table info available.
 #5  0x007e46c0 in g_markup_escape_text () from /lib/libglib-2.0.so.0
 No symbol table info available.
 #6  0x080f8b20 in mini_dialog_set_description (self=0x10fbb730,
 description=0x10fced18 "\b\206\a\021\230�") at minidialog.c:265
         desc_esc = 0x93266c "D%\223"
         desc_markup = 0xa611200 "�\\026\nx?\030\n�
         priv = (PidginMiniDialogPrivate *) 0x10dd0770
 #7  0x080f8ca6 in pidgin_mini_dialog_set_property (object=0x10fbb730,
 property_id=2, value=0xbfe854e8, pspec=0xa611200) at minidialog.c:302
         self = (PidginMiniDialog *) 0x10fbb730
         priv = (PidginMiniDialogPrivate *) 0x10dd0770
 #8  0x00901e2a in g_object_newv () from /lib/libgobject-2.0.so.0
 No symbol table info available.
 #9  0x009027d8 in g_object_new_valist () from /lib/libgobject-2.0.so.0
 No symbol table info available.
 #10 0x009028e0 in g_object_new () from /lib/libgobject-2.0.so.0
 No symbol table info available.
 #11 0x080f8601 in pidgin_mini_dialog_new (title=0x10e844d0
 "stu at domain.com/Home disconnected", description=0x10ddb988
 "\b\206\a\021\230�", icon_name=0x80fd836 "pidgin-dialog-error") at
 minidialog.c:106
         mini_dialog = (PidginMiniDialog *) 0x80a7aaf
 #12 0x080f6384 in pidgin_make_mini_dialog (gc=0x0, icon_name=0x80fd836
 "pidgin-dialog-error", primary=0x10e844d0 "stu at domain.com/Home
 disconnected", secondary=0x10ddb988 "\b\206\a\021\230�",
 user_data=0xa1c5e80) at gtkutils.c:3019
         mini_dialog = (PidginMiniDialog *) 0x5
         button_text = 0x1e83c0 "�\r"
         cb_datas = (GList *) 0x0
         args = 0x0
         first_call = 0
 #13 0x0807b750 in add_generic_error_dialog (account=0xa1c5e80,
 err=0x11009868) at gtkblist.c:4507
         mini_dialog = (GtkWidget *) 0xa233288
         username = 0xa1c5d18 "stu at domain.com/Home"
         enabled = 1
         primary = 0x10e844d0 "stu at domain.com/Home disconnected"
 #14 0x0807bfb5 in update_account_error_state (account=0xa1c5e80,
 old=0x11088958, new=0x11009868, gtkblist=0xa2a9c00) at gtkblist.c:4762
 No locals.
 #15 0x00183150 in purple_marshal_VOID__POINTER_POINTER_POINTER
 (cb=0x807bed9 <update_account_error_state>, args=0xbfe85794 " \a�020E",
 data=0xa2a9c00, return_val=0x0) at signals.c:703
         arg1 = (void *) 0xa1c5e80
         arg2 = (void *) 0x11088958
         arg3 = (void *) 0x11009868
 #16 0x00182ac1 in purple_signal_emit_vargs (instance=0x1ebd9c,
 signal=0x1cd8ce "account-error-changed", args=0xbfe85788
 "\200^\034\nX\211\b\021h\230") at signals.c:482
         instance_data = (PurpleInstanceData *) 0xa0fbf00
         signal_data = (PurpleSignalData *) 0xa0ff940
         handler_data = (PurpleSignalHandlerData *) 0xa6e3680
         l = (GList *) 0xa3ab090
         l_next = (GList *) 0x0
         tmp = 0xbfe85788 "\200^\034\nX\211\b\021h\230"
         __PRETTY_FUNCTION__ = "purple_signal_emit_vargs"
 #17 0x00182953 in purple_signal_emit (instance=0x1ebd9c, signal=0x1cd8ce
 "account-error-changed") at signals.c:434
         args = 0xbfe85788 "\200^\034\nX\211\b\021h\230"
         __PRETTY_FUNCTION__ = "purple_signal_emit"
 #18 0x00139239 in set_current_error (account=0xa1c5e80,
 new_err=0x11009868) at account.c:2337
         priv = (PurpleAccountPrivate *) 0xa1c5cb8
         old_err = (PurpleConnectionErrorInfo *) 0x11088958
 #19 0x001392bf in connection_error_cb (gc=0x10f075b0,
 type=PURPLE_CONNECTION_ERROR_NETWORK_ERROR, description=0x10dd0720 "Could
 not establish a connection with the server:\nConnection refused",
 unused=0x0) at account.c:2360
         account = (PurpleAccount *) 0xa1c5e80
         err = (PurpleConnectionErrorInfo *) 0x11009868
 #20 0x00182ff0 in purple_marshal_VOID__POINTER_INT_POINTER (cb=0x139263
 <connection_error_cb>, args=0xbfe85894 "�X�020\002Q", data=0x0,
 return_val=0x0) at signals.c:659
         arg1 = (void *) 0x10f075b0
         arg2 = 0
         arg3 = (void *) 0x10dd0720
 #21 0x00182ac1 in purple_signal_emit_vargs (instance=0x1ebe54,
 signal=0x1d23d2 "connection-error", args=0xbfe85888 "�u�020") at
 signals.c:482
         instance_data = (PurpleInstanceData *) 0xa0fbe50
         signal_data = (PurpleSignalData *) 0xa0f8700
         handler_data = (PurpleSignalHandlerData *) 0xa0ff9b8
         l = (GList *) 0xa12eb70
         l_next = (GList *) 0x0
         tmp = 0xbfe85888 "�u�020"
         __PRETTY_FUNCTION__ = "purple_signal_emit_vargs"
 #22 0x00182953 in purple_signal_emit (instance=0x1ebe54, signal=0x1d23d2
 "connection-error") at signals.c:434
         args = 0xbfe85888 "�u�020"
         __PRETTY_FUNCTION__ = "purple_signal_emit"
 #23 0x00151a5a in purple_connection_error_reason (gc=0x10f075b0,
 reason=PURPLE_CONNECTION_ERROR_NETWORK_ERROR, description=0x10dd0720
 "Could not establish a connection with the server:\nConnection refused")
 at connection.c:530
         ops = (PurpleConnectionUiOps *) 0x8112020
         __PRETTY_FUNCTION__ = "purple_connection_error_reason"
 #24 0x06f0b280 in jabber_login_callback (data=0x10f075b0, source=-1,
 error=0x6116ee "Connection refused") at jabber.c:522
         tmp = (gchar *) 0x10dd0720 "Could not establish a connection with
 the server:\nConnection refused"
         gc = (PurpleConnection *) 0x10f075b0
         js = (JabberStream *) 0x10e1bae8
 #25 0x00174866 in purple_proxy_connect_data_disconnect
 (connect_data=0x11087848, error_message=0x6116ee "Connection refused") at
 proxy.c:352
 No locals.
 #26 0x00174a39 in socket_ready_cb (data=0x11087848, source=29, cond=3) at
 proxy.c:434
         connect_data = (PurpleProxyConnectData *) 0x11087848
         error = 111
         ret = 0
 #27 0x080a7b07 in pidgin_io_invoke (source=0x10e74a28, condition=24,
 data=0x11009878) at gtkeventloop.c:78
         closure = (PidginIOClosure *) 0x11009878
         purple_cond = 3
 #28 0x00809ecd in ?? () from /lib/libglib-2.0.so.0
 No symbol table info available.
 #29 0x007e07f2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
 No symbol table info available.
 #30 0x007e37cf in ?? () from /lib/libglib-2.0.so.0
 No symbol table info available.
 #31 0x007e3b79 in g_main_loop_run () from /lib/libglib-2.0.so.0
 No symbol table info available.
 #32 0x06019f44 in IA__gtk_main () at gtkmain.c:1154
 }}}

 new_err is totally busted in #18:
 {{{
 p *new_err --> $4 = {type = 176019472, description = 0x10d00000 "\001"}
 }}}

-- 
Ticket URL: <http://developer.pidgin.im/ticket/4815>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list