diff --git a/thermometer/thermometer.c b/thermometer/thermometer.c
index a64ed54..9d23275 100644
--- a/thermometer/thermometer.c
+++ b/thermometer/thermometer.c
{
struct watcher *watcher = user_data;
- if (watcher->id > 0)
- g_dbus_remove_watch(watcher->t->conn, watcher->id);
-
g_free(watcher->path);
g_free(watcher->srv);
g_free(watcher);
}
+static void remove_watcher(gpointer user_data)
+{
+ struct watcher *watcher = user_data;
+
+ g_dbus_remove_watch(watcher->t->conn, watcher->id);
+}
+
static void destroy_char(gpointer user_data)
{
struct characteristic *c = user_data;
g_slist_free_full(t->chars, destroy_char);
if (t->fwatchers != NULL)
- g_slist_free_full(t->fwatchers, destroy_watcher);
+ g_slist_free_full(t->fwatchers, remove_watcher);
dbus_connection_unref(t->conn);
btd_device_unref(t->dev);
remove_int_watcher(t, watcher);
t->fwatchers = g_slist_remove(t->fwatchers, watcher);
- watcher->id = 0;
+ g_dbus_remove_watch(watcher->t->conn, watcher->id);
if (g_slist_length(t->fwatchers) == 0)
disable_final_measurement(t);
remove_int_watcher(t, watcher);
t->fwatchers = g_slist_remove(t->fwatchers, watcher);
- destroy_watcher(watcher);
+ g_dbus_remove_watch(watcher->t->conn, watcher->id);
if (g_slist_length(t->fwatchers) == 0)
disable_final_measurement(t);