summaryrefslogtreecommitdiff
path: root/gdbus/watch.c
Commit message (Collapse)AuthorAgeFilesLines
* gdbus: Add SPDX License IdentifierTedd Ho-Jeong An2020-09-211-14/+1
| | | | | | | | | | | | | | | | | This patch adds SPDX License Identifier and removes the license text. ------------------------------------- License COUNT ------------------------------------- GPL-2.0-or-later : 6 License: GPL-2.0-or-later gdbus/mainloop.c gdbus/object.c gdbus/polkit.c gdbus/client.c gdbus/watch.c gdbus/gdbus.h
* gdbus: Fix Memory LeakSaurav Babu2015-12-041-25/+25
| | | | Members of data are allocated memory but not freed only data is freed
* gdbus: Fix not calling disconnect functionSzymon Janc2015-02-241-3/+4
| | | | | | If daemon gets disconnected from D-Bus sender is NULL. Watches that was explicitly added with NULL sender (ie disconnected_signal in g_dbus_set_disconnect_function) should be called anyway.
* gdbus: Fix match rule for NameOwnerChangedAlban Crequy2014-09-151-1/+2
| | | | | | When subscribing to the D-Bus signal NameOwnerChanged from the bus driver, specify the object path and the sender in the match rule. Otherwise, random connections on the bus could impersonate the bus driver.
* gdbus: Fix crash when calling g_dbus_add_service_watchLuiz Augusto von Dentz2014-08-201-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If g_dbus_add_service_watch is called for service which bus name is already known the following crash can happen: invalid read of size 1 at 0x4C2A2F2: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x4E97722: g_strdup (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x405B0C: update_name_cache (watch.c:435) by 0x405C37: update_service (watch.c:593) by 0x4E7A2A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E7A627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E7AA39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4038EA: client_ready (test-gdbus-client.c:1014) by 0x4E9E5E0: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E9E7A5: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E9EB1A: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x403614: main (test-gdbus-client.c:1058) Address 0x5dbe5d0 is 0 bytes inside a block of size 7 free'd at 0x4C28577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x4E7FF7E: g_free (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x405B04: update_name_cache (watch.c:434) by 0x405C37: update_service (watch.c:593) by 0x4E7A2A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E7A627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E7AA39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4038EA: client_ready (test-gdbus-client.c:1014) by 0x4E9E5E0: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E9E7A5: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x4E9EB1A: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.3800.2) by 0x403614: main (test-gdbus-client.c:1058)
* gdbus: Fix use after freeAndrei Emeltchenko2014-08-111-3/+8
| | | | | Refactor filter_data_remove_callback so that we do not iterate over freed pointer.
* gdbus/watch: Fix crash when disconnecting from D-BusLuiz Augusto von Dentz2013-09-121-0/+2
| | | | | | | | | | | | | | | | | | When disconnecting from D-Bus a message could be recieved with no sender: Invalid read of size 1 at 0x4A09EE1: strcmp (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x3B03C386B8: g_str_equal (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x4065D6: message_filter (watch.c:529) by 0x3B0700F9E5: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.4) by 0x4052E7: message_dispatch (mainloop.c:76) by 0x3B03C48962: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C47E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C48157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C48559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x4038C5: client_proxy_removed (test-gdbus-client.c:902) by 0x3B03C6B566: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C6B6E5: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) Address 0x0 is not stack'd, malloc'd or (recently) free'd
* gdbus/watch: Fix aborting when removing D-Bus filterLuiz Augusto von Dentz2013-09-121-17/+8
| | | | | | | | | | | In case of filter_data having a watch to a service name it may call dbus_connection_remove_filter twice causing libdbus to abort: process 24723: Attempt to remove filter function 0x4063e0 user data (nil), but no such filter has been added To fix this the code will now only attempt to call dbus_connection_remove_filter once in filter_data_free which is the counterpart of filter_data_get where dbus_connection_add_filter is called.
* gdbus/watch: Fix crash when g_dbus_remove_watch is called from connect callbackLuiz Augusto von Dentz2013-09-121-2/+6
| | | | | | | | | | | | | | | | | | | | at 0x40570C: update_service (watch.c:601) by 0x40584B: service_reply (watch.c:627) by 0x3B0700C511: ??? (in /usr/lib64/libdbus-1.so.3.7.4) by 0x3B0700F740: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.4) by 0x405167: message_dispatch (mainloop.c:76) by 0x3B03C48962: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C47E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C48157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x3B03C48559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3) Address 0x4c58a30 is 32 bytes inside a block of size 56 free'd at 0x4A074C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x3B03C4D9AE: g_free (in /usr/lib64/libglib-2.0.so.0.3600.3) by 0x406102: filter_data_remove_callback (watch.c:378) by 0x405FC0: g_dbus_remove_watch (watch.c:798) by 0x40A22B: g_dbus_client_unref (client.c:1227) by 0x40570B: update_service (watch.c:599) by 0x40584B: service_reply (watch.c:627)
* Revert "Ensure config.h is included by using CPPFLAGS"Johan Hedberg2012-12-071-0/+4
| | | | | | | | | | | | | | This reverts commit 8a03376544b046a84301847d1594f6c3674983ff. 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
* Ensure config.h is included by using CPPFLAGSLucas De Marchi2012-12-051-4/+0
| | | | | | | | | | 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.
* gdbus: Add g_dbus_add_properties_watch functionLuiz Augusto von Dentz2012-11-301-0/+28
| | | | Convenient function to create watches for D-Bus properties.
* gdbus: Remove not needed NULL pointer checksSzymon Janc2012-11-211-2/+2
| | | | | g_strdup returns NULL if argument passed is NULL and there is no need to double check that.
* gdbus: Fix not freeing list node by using g_slist_delete_linkLuiz Augusto von Dentz2012-10-031-1/+1
| | | | | g_slist_remove_link does not free the node which can cause leaks so replace that with g_slist_delete_link which does free memory properly.
* gdbus: Refactor filter_data_find()Lucas De Marchi2012-09-271-38/+5
| | | | | Now this function is only used for searching the listeners of a connection and the other parameters are not needed anymore.
* gdbus: Fix wrong signal handler matchLucas De Marchi2012-09-271-21/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we add a signal handler with g_dbus_add_signal_watch(), this function tries to multiplex the matches added in libdbus by checking if there's a previous filter_data with the same fields. However, if the field is NULL it accepts as being the same. The result is that the following watches will use the same filter data: watch1 = g_dbus_add_signal_watch(conn, BUS_NAME, NULL, iface, member, cb1, data1, NULL); watch2 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path2", iface, member, cb2, data2, NULL); watch3 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path3", iface, member, cb3, data3, NULL); The result is that when a signal arrives with path == "/path2", all 3 callbacks above will be called, with the same signal delivered to all of them. Another problem is that, if we invert the calls like below, only signals to cb1 will never be trigerred, nonetheless it used path == NULL. watch2 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path2", iface, member, cb2, data2, NULL); watch1 = g_dbus_add_signal_watch(conn, BUS_NAME, NULL, iface, member, cb1, data1, NULL); watch3 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path3", iface, member, cb3, data3, NULL); This is fixed by not multiplexing the matchs with filter data if any of the fields are different, including being NULL. When a signal arrives, if a field is NULL we accept it as a match, but not when adding the signal handler.
* gdbus: Fix removal of filter after last filter_dataLucas De Marchi2012-06-281-9/+8
| | | | | | | | | | | | | | | | | | | | | If there's a signal watch that's also watching for name (data->name_watch) currently we are trying to remove the message_filter twice since we may have the following call chain: filter_data_remove_callback() filter_data_free() g_dbus_remove_watch() filter_data_remove_callback() filter_data_free() dbus_connection_remove_filter() dbus_connection_remove_filter() Because of this we can't currently watch for signals passing the bus name. After this patch we don't have this issue anymore. We fix it by removing the filter before calling filter_data_free() if we are the last filter_data and thus avoid calling dbus_connection_remove_filter() twice.
* gdbus: Use destroy callback for service watchAnderson Lizardo2012-04-041-1/+1
| | | | | | Even though service watches accepted a "destroy" callback, they were being ignored. This fix properly pass them along so they are called when the watch is removed.
* gdbus: Update copyright informationMarcel Holtmann2011-01-011-1/+1
|
* gdbus: fix accessing freed callback dataJohan Hedberg2010-12-091-5/+5
| | | | | cb->disc_func or cb->conn_func could remove the callback so this needs to be checked for before continuing processing.
* gdbus: explicitly compare pointers to NULLLucas De Marchi2010-12-081-11/+10
| | | | | | | | | | | | | | This patch was generated by the following semantic patch (http://coccinelle.lip6.fr/) // <smpl> @fix disable is_null,isnt_null1@ expression *E; @@ - !E + E == NULL // </smpl>
* Fix calling watch callbacks after it has been removedLuiz Augusto von Dentz2010-09-071-30/+49
| | | | | | Pending call should be removed if the watch is removed since the application no longer expect that to be reached and may already freed the data associated with it.
* Fix signal watch when a service name is givenLuiz Augusto Von Dentz2010-09-071-33/+128
| | | | | | | The bus name should be resolved when adding a watch by service name since messages do always come with sender set to owner's bus name, also it should listen to owner updates since it can change without invalidating the watch.
* Do not automatically remove watches for service namesLuiz Augusto Von Dentz2010-09-071-6/+7
| | | | Services can be owned again so it is perfectly fine to keep the watch.
* gdbus: Fix memory leak of service_dataZhenhua Zhang2010-07-261-1/+1
| | | | | Avoid the memory leak of server_data after service_reply has been called.
* Fix: a pending call was leaking in check_serviceVinicius Costa Gomes2010-02-171-0/+2
| | | | | | This was triggering an assert inside libdbus when the timeout inside the leaking pending call expired. The assert said that we were trying to remove an nonexistent timeout.
* Fix regression when removing watchesLuiz Augusto Von Dentz2010-01-081-5/+9
| | | | | | | | | filter_data_find return the first data registered in this case so there is no guarantee that it return the same data as passed to filter_data_remove_callback which is the one that should be removed. The fix is to simple cache the connection removing the correct data before checking if there is any filter left.
* Update copyright information of D-Bus helper libraryMarcel Holtmann2010-01-011-1/+1
|
* Fix undefined symbolsLuiz Augusto Von Dentz2009-12-291-2/+2
|
* Add initial implementation of g_dbus_add_signal_watchLuiz Augusto Von Dentz2009-12-291-200/+317
| | | | | With g_dbus_add_signal_watch there is no need to register multiple filters for dbus nor add matching rules manually.
* Use NameHasOwner instead of ListNames for name checkingJohan Hedberg2009-08-081-15/+9
|
* Fix blocking service watch initial connect handlingMarcel Holtmann2009-08-061-1/+96
|
* Fix crash when calling g_dbus_remove_watch from inside the watch callback.Luiz Augusto von Dentz2009-05-061-10/+41
|
* Fix g_dbus_remove_all_watches to remove all watches for the given connection.Luiz Augusto von Dentz2009-04-031-7/+4
|
* Fix gdbus watch function not handling multiple dbus connections.Luiz Augusto von Dentz2009-04-031-12/+33
| | | | | | | gdbus was only adding a message filter for the very first connection given by the user, this caused a bug in agent registration since it has a diffent connection than previous watches it won't detect agent disappearing from the bus.
* Revert "Fix null dereference in gdbus/watch.c"Johan Hedberg2009-04-031-1/+1
| | | | | This reverts commit 2a96da99c75ea86d7d6adf9c03a0189e6b445737 so that gdbus updates from obexd can be merged.
* Fix null dereference in gdbus/watch.cGustavo F. Padovan2009-04-011-1/+1
| | | | | If name or data->name is null we have a null dereference. Not name and data->name.
* Update copyright informationMarcel Holtmann2009-01-011-1/+1
|
* Add missing gdbus function declarationsMarcel Holtmann2008-12-061-0/+7
|
* Change file headers for D-Bus helper libraryMarcel Holtmann2008-12-061-1/+1
|
* Add g_dbus_add_service_watch() implementationMarcel Holtmann2008-10-171-20/+40
|
* Change declaration of GDBusWatchFunctionMarcel Holtmann2008-10-171-2/+2
|
* Revert wrong listner id counter offsetMarcel Holtmann2008-06-081-1/+1
|
* Avoid a watch id of 0Marcel Holtmann2008-06-081-1/+4
|
* Change name_listener API to libgdbus watch APIJohan Hedberg2008-05-291-50/+13
|
* Move D-Bus watch functions into libgdbusMarcel Holtmann2008-05-081-0/+380