view README.dbus @ 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 2eca9ed49469
children
line wrap: on
line source

This file describes how to compile and run gaim with dbus support.
Hopefully, most of the steps from point 3 will soon be automated.


1. Make sure you have the latest version (0.34) of the dbus library
   installed, including glib bindings.  

   http://www.freedesktop.org/Software/dbus


2. Compile gaim

   ./configure --enable-dbus
   make
   make install


3. Configure your dbus instalation for gaim

   A. Find your dbus session configuration file, usually

      /etc/dbus-1/session.conf

   B. In that file, find the <servicedir> section.  This section
      contains the directory that stores files describing services,
      usually

      /usr/share/dbus-1/services

   C. Copy src/dbus-gaim.service to that directory

   D. Edit the dbus-gaim.service file you've just copied, and replace
      the path in the "Exec=" line with the path to your gaim
      executable.


4. Start Session DBUS if you haven't done it already

   eval `dbus-launch --session`
   export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID

   These commands will set the two above shell variables.  These
   variables must be set before running any dbus-aware programs.

Start gaim as usual.  To communicate with it, use "gaim-send".  When
you execute gaim-send, the dbus system will automatically start a gaim
process if one is not running already.