]> git.meshlink.io Git - catta/blobdiff - avahi-core/server.c
don't register workstation service in example
[catta] / avahi-core / server.c
index 18459b6114accd8df283cf0254bfd118f7ae6252..3c385070b20e23bd8b95213eee4992eef3750d97 100644 (file)
@@ -221,7 +221,8 @@ static void withdraw_rrset(AvahiServer *s, AvahiKey *key) {
     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) {
@@ -1947,10 +1948,8 @@ void avahi_entry_group_change_state(AvahiEntryGroup *g, AvahiEntryGroupState sta
 
     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) {
@@ -2002,11 +2001,14 @@ void avahi_entry_group_free(AvahiEntryGroup *g) {
 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) {
@@ -2042,17 +2044,17 @@ gint avahi_entry_group_commit(AvahiEntryGroup *g) {
 
     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;
@@ -2073,6 +2075,11 @@ void avahi_entry_group_reset(AvahiEntryGroup *g) {
             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;