Mercurial > pidgin
view libpurple/win32/targets.mak @ 15976:a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Thread 0 Crashed:
0 libobjc.A.dylib 0x90a59380 objc_msgSend 16
1 Libgaim 0x0fe23bcd gaim_proxy_connect_data_disconnect 172
2 Libgaim 0x0fe23d63 socket_ready_cb 199
3 com.apple.CoreFoundation 0x90843ffd __CFSocketDoCallback 551
(objc_msgSend is how ObjC routes messages... it's being called because connect_data->cconnect_cb is invalid).
It appears that when this crash happens, the socket is marked as ready just before the computer sleeps; on the next run loop, the callback will be called [socket_ready_cb()]. The computer sleeps and every account is disconnected first, which calls gaim_proxy_connect_cancel_with_handle(), destroying the connect_data. When it awakens, it calls socket_ready_cb() and the crash occurs.
I've added PURPLE_PROXY_CONNECT_DATA_IS_VALID, which takes advantage of the fact that all valid connect_data objects are stored in the handles GSList, just as PURPLE_GAIM_CONNECTION_IS_VALID works.
author | Evan Schoenberg <evan.s@dreskin.net> |
---|---|
date | Sun, 01 Apr 2007 02:17:06 +0000 |
parents | 0e17470b47c2 |
children | ded8da3de5f8 |
line wrap: on
line source
# # targets.mak # # This file should be included at the end of all Makefile.mingw # files for better handling of cross directory dependencies # $(GAIM_CONFIG_H): $(GAIM_TOP)/config.h.mingw cp $(GAIM_TOP)/config.h.mingw $(GAIM_CONFIG_H) $(GAIM_LIBGAIM_DLL) $(GAIM_LIBGAIM_DLL).a: $(MAKE) -C $(GAIM_LIB_TOP) -f $(GAIM_WIN32_MAKEFILE) libpurple.dll $(GAIM_LIBGAIM_PERL_DLL) $(GAIM_LIBGAIM_PERL_DLL).a: $(MAKE) -C $(GAIM_LIB_PERL_TOP) -f $(GAIM_WIN32_MAKEFILE) perl.dll $(GAIM_GTKGAIM_DLL) $(GAIM_GTKGAIM_DLL).a: $(MAKE) -C $(GAIM_GTK_TOP) -f $(GAIM_WIN32_MAKEFILE) pidgin.dll $(GAIM_IDLETRACK_DLL) $(GAIM_IDLETRACK_DLL).a: $(MAKE) -C $(GAIM_GTK_IDLETRACK_TOP) -f $(GAIM_WIN32_MAKEFILE) idletrack.dll $(GAIM_EXE): $(MAKE) -C $(GAIM_GTK_TOP) -f $(GAIM_WIN32_MAKEFILE) pidgin.exe $(GAIM_PORTABLE_EXE): $(MAKE) -C $(GAIM_GTK_TOP) -f $(GAIM_WIN32_MAKEFILE) pidgin-portable.exe # Installation Directories $(GAIM_INSTALL_DIR): mkdir -p $(GAIM_INSTALL_DIR) $(GAIM_INSTALL_PERLMOD_DIR): mkdir -p $(GAIM_INSTALL_PERLMOD_DIR) $(GAIM_INSTALL_PLUGINS_DIR): mkdir -p $(GAIM_INSTALL_PLUGINS_DIR) $(GAIM_INSTALL_PO_DIR): mkdir -p $(GAIM_INSTALL_PO_DIR)