summaryrefslogtreecommitdiffstats
path: root/avahi-core/cache.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-07-16 23:48:35 +0000
committerLennart Poettering <lennart@poettering.net>2005-07-16 23:48:35 +0000
commit83fa43badc59a54641b0c2319a8a8e4d0f9d9b85 (patch)
treef8584bc1e35388046a7d1ecdc7d9138cfaf5e5c6 /avahi-core/cache.c
parent774b0629a3536eda0b560e092964cf94d6b742aa (diff)
Fix cache managament
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@168 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/cache.c')
-rw-r--r--avahi-core/cache.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/avahi-core/cache.c b/avahi-core/cache.c
index 865950f..52304a8 100644
--- a/avahi-core/cache.c
+++ b/avahi-core/cache.c
@@ -27,6 +27,7 @@
#include "util.h"
#include "cache.h"
+#include "log.h"
#define AVAHI_MAX_CACHE_ENTRIES 200
@@ -151,13 +152,16 @@ static void next_expiry(AvahiCache *c, AvahiCacheEntry *e, guint percent);
static void elapse_func(AvahiTimeEvent *t, void *userdata) {
AvahiCacheEntry *e = userdata;
+/* gchar *txt; */
g_assert(t);
g_assert(e);
+/* txt = avahi_record_to_string(e->record); */
+
if (e->state == AVAHI_CACHE_FINAL) {
remove_entry(e->cache, e);
-/* avahi_log_debug("Removing entry from cache due to expiration"); */
+/* avahi_log_debug("Removing entry from cache due to expiration (%s)", txt); */
} else {
guint percent = 0;
@@ -189,13 +193,15 @@ static void elapse_func(AvahiTimeEvent *t, void *userdata) {
/* Request a cache update, if we are subscribed to this entry */
if (avahi_is_subscribed(e->cache->server, e->cache->interface, e->record->key)) {
-/* avahi_log_debug("Requesting cache entry update at %i%%.", percent); */
+/* avahi_log_debug("Requesting cache entry update at %i%% for %s.", percent, txt); */
avahi_interface_post_query(e->cache->interface, e->record->key, TRUE);
}
/* Check again later */
next_expiry(e->cache, e, percent);
}
+
+/* g_free(txt); */
}
static void update_time_event(AvahiCache *c, AvahiCacheEntry *e) {
@@ -209,20 +215,25 @@ static void update_time_event(AvahiCache *c, AvahiCacheEntry *e) {
}
static void next_expiry(AvahiCache *c, AvahiCacheEntry *e, guint percent) {
- gulong usec;
-
g_assert(c);
g_assert(e);
g_assert(percent > 0 && percent <= 100);
+ gdouble usec;
+/* gchar *txt; */
- e->expiry = e->timestamp;
- usec = e->record->ttl * 10000;
+ usec = (gdouble) e->record->ttl * 10000;
/* 2% jitter */
- usec = g_random_int_range(usec*percent, usec*(percent+2));
+ usec = g_random_double_range(usec*percent, usec*(percent+2));
+/* g_message("next expiry: %g (%s)", usec / 1000000.0, txt = avahi_record_to_string(e->record)); */
+/* g_free(txt); */
+
+ e->expiry = e->timestamp;
+ g_time_val_add(&e->expiry, (glong) usec);
+
+/* g_message("wake up in +%lu seconds", e->expiry.tv_sec - e->timestamp.tv_sec); */
- g_time_val_add(&e->expiry, usec);
update_time_event(c, e);
}