OSDN Git Service

gdbus: Fix removal of filter after last filter_data
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Mon, 25 Jun 2012 15:44:40 +0000 (12:44 -0300)
committerJohan Hedberg <johan.hedberg@intel.com>
Thu, 28 Jun 2012 07:37:42 +0000 (10:37 +0300)
commitca0b4c4c658ba61b5a23ed9dde2bebc4558fe032
tree5df5d2ecf9108689318c00e8fdd7f6a2cb6ce984
parent07858bca3c40f14fba00a74c1747485e04d0e953
gdbus: Fix removal of filter after last filter_data

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/watch.c