summaryrefslogtreecommitdiff
path: root/gdbus/watch.c
AgeCommit message (Collapse)AuthorFilesLines
2012-10-04gdbus: Fix not freeing list node by using g_slist_delete_linkLuiz Augusto von Dentz1-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.
2012-09-28gdbus: Refactor filter_data_find()Lucas De Marchi1-38/+5
Now this function is only used for searching the listeners of a connection and the other parameters are not needed anymore.
2012-09-28gdbus: Fix wrong signal handler matchLucas De Marchi1-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.
2012-06-30gdbus: Fix removal of filter after last filter_dataLucas De Marchi1-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.
2012-04-05gdbus: Use destroy callback for service watchAnderson Lizardo1-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.
2011-01-01gdbus: Update copyright informationMarcel Holtmann1-1/+1
2010-12-10gdbus: fix accessing freed callback dataJohan Hedberg1-5/+5
cb->disc_func or cb->conn_func could remove the callback so this needs to be checked for before continuing processing.
2010-12-08gdbus: explicitly compare pointers to NULLLucas De Marchi1-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>
2010-09-08Fix calling watch callbacks after it has been removedLuiz Augusto von Dentz1-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.
2010-09-08Fix signal watch when a service name is givenLuiz Augusto Von Dentz1-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.
2010-09-08Do not automatically remove watches for service namesLuiz Augusto Von Dentz1-6/+7
Services can be owned again so it is perfectly fine to keep the watch.
2010-07-26Free service data in service_replyZhenhua Zhang1-1/+1
Avoid the memory leak of server_data.
2010-02-17Fix: a pending call was leaking in check_serviceVinicius Costa Gomes1-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.
2010-01-08Fix regression when removing watchesLuiz Augusto Von Dentz1-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.
2010-01-01Update copyright information of D-Bus helper libraryMarcel Holtmann1-1/+1
2009-12-29Fix undefined symbolsLuiz Augusto Von Dentz1-2/+2
2009-12-29Add initial implementation of g_dbus_add_signal_watchLuiz Augusto Von Dentz1-200/+317
With g_dbus_add_signal_watch there is no need to register multiple filters for dbus nor add matching rules manually.
2009-08-08Use NameHasOwner instead of ListNames for name checkingJohan Hedberg1-15/+9
2009-08-06Fix blocking service watch initial connect handlingMarcel Holtmann1-1/+96
2009-05-06Fix crash when calling g_dbus_remove_watch from watch callbackLuiz Augusto von Dentz1-10/+41
2009-04-04Fix handling of watch functionsMarcel Holtmann1-19/+37
2009-01-01Update copyright informationMarcel Holtmann1-1/+1
2008-10-17Add g_dbus_add_service_watch() implementationMarcel Holtmann1-20/+40
2008-10-17Change declaration of GDBusWatchFunctionMarcel Holtmann1-2/+2
2008-08-13Add copy of libgdbus helper for easier adoptionMarcel Holtmann1-0/+353