GFS: make statserv_main return for one-shot mode.
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 17 Mar 2011 08:19:22 +0000 (09:19 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 17 Mar 2011 08:19:22 +0000 (09:19 +0100)
Bug #4064.

src/seshigh.c
src/statserv.c

index e739d3a..0a3f9fa 100644 (file)
@@ -227,10 +227,6 @@ void destroy_association(association *h)
     request_delq(&h->outgoing);
     xfree(h);
     xmalloc_trav("session closed");
-    if (cb && cb->one_shot)
-    {
-        exit(0);
-    }
 }
 
 static void do_close_req(association *a, int reason, char *message,
index ab15c21..7560058 100644 (file)
@@ -610,6 +610,8 @@ static void xml_config_bend_stop(void)
     }
 }
 
+static void remove_listeners(void);
+
 /*
  * handle incoming connect requests.
  * The dynamic mode is a bit tricky mostly because we want to avoid
@@ -909,6 +911,9 @@ static void listener(IOCHAN h, int event)
             return;
         }
 
+        if (control_block.one_shot)
+            remove_listeners();
+
         yaz_log(log_sessiondetail, "Connect from %s", cs_addrstr(new_line));
 
         no_sessions++;
@@ -1129,6 +1134,13 @@ static int add_listener(char *where, int listen_id)
     return 0; /* OK */
 }
 
+static void remove_listeners(void)
+{
+    IOCHAN l = pListener;
+    for (; l; l = l->next)
+        iochan_destroy(l);
+}
+
 #ifndef WIN32
 /* UNIX only (for windows we don't need to catch the signals) */
 static void catchchld(int num)