Commit Graph

28 Commits

Author SHA1 Message Date
Luiz Augusto von Dentz
3f16d31cc3 gdbus: Replace g_timeout_add with g_idle_add
Passing 0 as timeout to g_timeout_add should equivalent to g_idle_add.
2014-02-18 22:16:56 +02:00
Anderson Lizardo
510b32b715 gdbus: Fix incorrect DBusConnection reference counting
Commit abfc2b0dd5 attempted to fix a crash
related to improper reference counting, but the main issue was that the
reference was taken only during the function call (which is usually
unnecessary for single thread), but still passed a pointer to
DBusConnection to a function that is called by the mainloop. This left a
window where the DBusConnection can be destroyed.

Fixes this crash on unit/test-gdbus-client:

==32642== Invalid read of size 4
==32642==    at 0x690D0A6: dbus_connection_ref (in
/lib/i386-linux-gnu/libdbus-1.so.3.7.6)
==32642==    by 0x804CEDB: message_dispatch (mainloop.c:73)
==32642==    by 0x684580E: g_timeout_dispatch (gmain.c:4450)
==32642==    by 0x6844A75: g_main_context_dispatch (gmain.c:3065)
==32642==    by 0x6844E14: g_main_context_iterate.isra.23 (gmain.c:3712)
==32642==    by 0x68452FA: g_main_loop_run (gmain.c:3906)
==32642==    by 0x804C7D3: client_connect_disconnect
(test-gdbus-client.c:188)
==32642==    by 0x6868DB2: g_test_run_suite_internal (gtestutils.c:2067)
==32642==    by 0x6868F8D: g_test_run_suite_internal (gtestutils.c:2138)
==32642==    by 0x6869320: g_test_run_suite (gtestutils.c:2189)
==32642==    by 0x686936B: g_test_run (gtestutils.c:1508)
==32642==    by 0x696D4D2: (below main) (libc-start.c:226)
==32642==  Address 0x709c6e4 is 140 bytes inside a block of size 144
free'd
==32642==    at 0x67E806C: free (in
/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==32642==    by 0x692D62E: dbus_free (in
/lib/i386-linux-gnu/libdbus-1.so.3.7.6)
==32642==    by 0x690E1C2: ??? (in
/lib/i386-linux-gnu/libdbus-1.so.3.7.6)
==32642==    by 0x804AAEC: destroy_context (test-gdbus-client.c:104)
==32642==    by 0x6868DB2: g_test_run_suite_internal (gtestutils.c:2067)
==32642==    by 0x6868F8D: g_test_run_suite_internal (gtestutils.c:2138)
==32642==    by 0x6869320: g_test_run_suite (gtestutils.c:2189)
==32642==    by 0x686936B: g_test_run (gtestutils.c:1508)
==32642==    by 0x696D4D2: (below main) (libc-start.c:226)
2014-02-18 21:54:50 +02:00
Johan Hedberg
b8779d2202 Revert "Ensure config.h is included by using CPPFLAGS"
This reverts commit 8a03376544.

The patch needs to be split up and the gdbus/ changes were bogus
compared to the original commit message.

Conflicts:
	Makefile.am
	Makefile.obexd
	profiles/cyclingspeed/cyclingspeed.c
	profiles/heartrate/heartrate.c
	src/error.c
2012-12-07 12:46:04 +02:00
Lucas De Marchi
8a03376544 Ensure config.h is included by using CPPFLAGS
Instead of trying to include config.h in each file over the tree and
possibly forgetting to include it, give a "-include config.h" argument
to the compiler so it's guaranteed that a) it will be included for all
source files and b) it will be the first header included.

gdbus/ directory is left out, since it would break other projects using
it.
2012-12-05 17:18:07 +02:00
Johan Hedberg
abfc2b0dd5 gdbus: Fix crash when getting disconnected from the bus
When getting disconnected from the bus sometimes (maybe always?)
dbus_watch_handle() can cause the "info" context to be free'd meaning
that we should not try to access it after the call. The only member we
need access to is the connection pointer and as the code already has a
ref() call for it it's only natural to solve the issue by adding a local
variable not dependent on "info".

The backtrace of the crash fixed looks as follows:

 Invalid read of size 8
   at 0x121085: watch_func (mainloop.c:105)
   by 0x4C72694: g_main_context_dispatch (gmain.c:2539)
   by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146)
   by 0x4C72DC1: g_main_loop_run (gmain.c:3340)
   by 0x120541: main (main.c:551)
 Address 0x5bbcd90 is 16 bytes inside a block of size 24 free'd
   at 0x4A079AE: free (vg_replace_malloc.c:427)
   by 0x4C7837E: g_free (gmem.c:252)
   by 0x4F708BF: dbus_watch_set_data (dbus-watch.c:614)
   by 0x4F70938: _dbus_watch_unref (dbus-watch.c:132)
   by 0x4F6E9A7: _dbus_transport_handle_watch (dbus-transport.c:884)
   by 0x4F59AFB: _dbus_connection_handle_watch (dbus-connection.c:1497)
   by 0x4F70AF9: dbus_watch_handle (dbus-watch.c:683)
   by 0x121084: watch_func (mainloop.c:103)
   by 0x4C72694: g_main_context_dispatch (gmain.c:2539)
   by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146)
   by 0x4C72DC1: g_main_loop_run (gmain.c:3340)
   by 0x120541: main (main.c:551)
2012-09-26 21:45:05 +03:00
Marcel Holtmann
2c8caaf0ba gdbus: Remove unneeded NEED_DBUS_WATCH_GET_UNIX_FD check 2012-04-16 18:23:01 +02:00
Grant Erickson
af4519a50c gdbus: Unconditionally remove D-Bus timeouts
Address an issue in which the daemon incorrectly handles D-Bus main
loop timeouts by only removing timeouts that are not enabled when
D-Bus requests a timeout removal.
2011-03-09 13:34:03 -08:00
Marcel Holtmann
e7c4557de7 gdbus: Update copyright information 2011-01-01 17:32:11 -08:00
Luiz Augusto von Dentz
fd6b74727b gdbus: fix not handling bus disconnects
We where not dispatching data when a bus disconnects which cause
Disconnected signal to not be processed and thus causing the process to
either not exit or to not trigger callbacks registered with
g_dbus_set_disconnect_function.

To fix this now we always schedule a dispatch which will make sure data
still not processed will make its way to the proper handlers even if
disconnected.
2010-10-13 15:53:44 +03:00
Vinicius Costa Gomes
e6b83be22e Fix the case when the requested name is already in use
We weren't setting the dbus error in this situation.
2010-03-07 14:31:15 -08:00
Marcel Holtmann
dd99e73bd8 Remove unneeded use of status variable 2010-01-27 09:50:04 +01:00
Forrest Zhao
22d39c8860 Introduce g_dbus_setup_private() to gdbus
g_dbus_setup_private() is used to setup private DBusConnection
2010-01-27 09:50:04 +01:00
Marcel Holtmann
4da121910a Cleanup of D-Bus mainloop integration 2010-01-02 21:42:49 -08:00
Marcel Holtmann
d21f53083c Update copyright information of D-Bus helper library 2010-01-01 17:04:13 -08:00
Luiz Augusto Von Dentz
2ae4af4d42 Port gdbus to use g_dbus_add_signal_watch 2009-12-29 11:16:39 +02:00
Daniel Orstadius
0b15d14b98 Fix D-Bus timeout handling
Timeouts should also be removed in the remove_timeout callback in
addition to the timeout_handler_free function. This is how dbus-glib
does it and it seems to prevent crashes in certain situations.
2009-12-17 07:35:40 +02:00
Claudio Takahasi
45806a9b07 Fix message handling for autostart.
Current implementation of libdbus Request name is blocking, consequently
the first incomming message that triggered the service autostart is not
being processed properly.
2009-10-29 15:40:08 +02:00
Marcel Holtmann
f19ee3a6dc Fix blocking service watch initial connect handling 2009-08-06 22:12:53 -07:00
Marcel Holtmann
fb333f1c88 Update copyright information 2009-01-01 19:33:20 +01:00
Marcel Holtmann
9fb751d212 Add missing gdbus function declarations 2008-12-06 15:45:28 +01:00
Marcel Holtmann
be0ba88ce4 Change file headers for D-Bus helper library 2008-12-06 15:40:08 +01:00
Marcel Holtmann
dfd3e56a3c Add function for checking if a service is present 2008-11-26 14:27:19 +01:00
Marcel Holtmann
606e4a9280 Fix connection disconnect function 2008-10-17 18:33:11 +02:00
Marcel Holtmann
957b231578 Don't consider mainloop integration of dbus-glib 2008-06-07 19:35:09 +00:00
Marcel Holtmann
7d1a9d5671 Remove GDBusDisconnectFunction type 2008-05-29 21:12:03 +00:00
Marcel Holtmann
aa215d6fa5 Emulate libgdbus API for mainloop integration 2008-05-08 19:39:12 +00:00
Marcel Holtmann
33191e6275 Move D-Bus mainloop integration into libgdbus 2008-05-08 19:12:44 +00:00
Marcel Holtmann
5442ba4d63 Add skeleton for libgdbus support 2008-05-08 17:58:33 +00:00