summaryrefslogtreecommitdiff
path: root/src/counter.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2010-06-30 13:59:50 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-06-30 19:24:58 +0200
commite4fb1ca873f840acd1e0a72a6f266843f65854ae (patch)
treed388378c8116c76be0f0795e549d10a82bec749b /src/counter.c
parent46d8e827d58417870243a5645c97adffc189303e (diff)
downloadconnman-e4fb1ca873f840acd1e0a72a6f266843f65854ae.tar.gz
connman-e4fb1ca873f840acd1e0a72a6f266843f65854ae.tar.bz2
connman-e4fb1ca873f840acd1e0a72a6f266843f65854ae.zip
Centralize rntl update timers
Instead of creating a new rntl trigger for each Counter object move this part to the rtnl core. Only one update trigger will be registered at RTNL. The minimum interval will used for the timeout callback.
Diffstat (limited to 'src/counter.c')
-rw-r--r--src/counter.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/src/counter.c b/src/counter.c
index d897fb59..bf9da902 100644
--- a/src/counter.c
+++ b/src/counter.c
@@ -42,7 +42,7 @@ struct connman_stats {
struct connman_counter {
char *owner;
char *path;
- guint timeout;
+ unsigned int interval;
guint watch;
};
@@ -63,8 +63,7 @@ static void remove_counter(gpointer user_data)
if (counter->watch > 0)
g_dbus_remove_watch(connection, counter->watch);
- if (counter->timeout > 0)
- g_source_remove(counter->timeout);
+ __connman_rtnl_update_interval_remove(counter->interval);
g_free(counter->owner);
g_free(counter->path);
@@ -81,17 +80,6 @@ static void owner_disconnect(DBusConnection *connection, void *user_data)
g_hash_table_remove(counter_table, counter->path);
}
-static gboolean counter_timeout(gpointer user_data)
-{
- struct connman_counter *counter = user_data;
-
- DBG("owner %s path %s", counter->owner, counter->path);
-
- __connman_rtnl_request_update();
-
- return TRUE;
-}
-
int __connman_counter_register(const char *owner, const char *path,
unsigned int interval)
{
@@ -113,15 +101,12 @@ int __connman_counter_register(const char *owner, const char *path,
g_hash_table_replace(counter_table, counter->path, counter);
g_hash_table_replace(owner_mapping, counter->owner, counter);
- if (interval > 0)
- counter->timeout = g_timeout_add_seconds(interval,
- counter_timeout, counter);
+ counter->interval = interval;
+ __connman_rtnl_update_interval_add(counter->interval);
counter->watch = g_dbus_add_disconnect_watch(connection, owner,
owner_disconnect, counter, NULL);
- __connman_rtnl_request_update();
-
return 0;
}