g_assert(key);
for (e = g_hash_table_lookup(s->entries_by_key, key); e; e = e->by_key_next)
- withdraw_entry(s, e);
+ if (!e->dead)
+ withdraw_entry(s, e);
}
static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i) {
g->state = state;
- if (g->callback) {
+ if (g->callback)
g->callback(g->server, g, state, g->userdata);
- return;
- }
}
AvahiEntryGroup *avahi_entry_group_new(AvahiServer *s, AvahiEntryGroupCallback callback, gpointer userdata) {
static void entry_group_commit_real(AvahiEntryGroup *g) {
g_assert(g);
+ g_get_current_time(&g->register_time);
+
avahi_entry_group_change_state(g, AVAHI_ENTRY_GROUP_REGISTERING);
- avahi_announce_group(g->server, g);
- avahi_entry_group_check_probed(g, FALSE);
- g_get_current_time(&g->register_time);
+ if (!g->dead) {
+ avahi_announce_group(g->server, g);
+ avahi_entry_group_check_probed(g, FALSE);
+ }
}
static void entry_group_register_time_event_callback(AvahiTimeEvent *e, gpointer userdata) {
if (avahi_timeval_compare(&g->register_time, &now) <= 0) {
/* Holdoff time passed, so let's start probing */
-/* avahi_log_debug("Holdoff passed, directly going on."); */
+/* avahi_log_debug("Holdoff passed, directly going on."); */
entry_group_commit_real(g);
} else {
-/* avahi_log_debug("Holdoff not passed, sleeping."); */
+/* avahi_log_debug("Holdoff not passed, sleeping."); */
- /* Holdoff time has not yet passed, so let's wait */
- avahi_entry_group_change_state(g, AVAHI_ENTRY_GROUP_REGISTERING);
-
+ /* Holdoff time has not yet passed, so let's wait */
g_assert(!g->register_time_event);
g->register_time_event = avahi_time_event_queue_add(g->server->time_event_queue, &g->register_time, entry_group_register_time_event_callback, g);
+
+ avahi_entry_group_change_state(g, AVAHI_ENTRY_GROUP_REGISTERING);
}
return AVAHI_OK;
e->dead = TRUE;
}
}
+
+ if (g->register_time_event) {
+ avahi_time_event_queue_remove(g->server->time_event_queue, g->register_time_event);
+ g->register_time_event = NULL;
+ }
g->server->need_entry_cleanup = TRUE;
g->n_probing = 0;