]> git.sur5r.net Git - bacula/bacula/commitdiff
Rework bnet_server exit code
authorKern Sibbald <kern@sibbald.com>
Tue, 31 Jul 2007 12:45:41 +0000 (12:45 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 31 Jul 2007 12:45:41 +0000 (12:45 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5270 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/lib/bnet_server.c

index 76d58a2162bc5eca24976451974f156fc0370cd9..d6bac6de0523b447fa8a1a045c41efa2fa793b63 100644 (file)
@@ -96,7 +96,8 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
    Dmsg1(100, "Addresses %s\n", build_addresses_str(addrs, allbuf, sizeof(allbuf)));
 
    foreach_dlist(p, addrs) {
-      fd_ptr = (s_sockfd *)malloc(sizeof(s_sockfd));
+      /* Allocate on stack from -- no need to free */
+      fd_ptr = (s_sockfd *)alloca(sizeof(s_sockfd));
       fd_ptr->port = p->get_port_net_order();
       /*
        * Open a TCP socket
@@ -162,10 +163,6 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
          if (errno == EINTR) {
             continue;
          }
-         /* Error, get out */
-         foreach_dlist(fd_ptr, &sockfds) {
-            close(fd_ptr->fd);
-         }
          Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.bstrerror());
          break;
       }
@@ -227,6 +224,12 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
       }
    }
 
+   /* Cleanup open files and pointers to them */
+   while ((fd_ptr = (s_sockfd *)sockfds.first())) {
+      close(fd_ptr->fd);
+      sockfds.remove(fd_ptr);     /* don't free() item it is on stack */
+   }
+
    /* Stop work queue thread */
    if ((stat = workq_destroy(client_wq)) != 0) {
       berrno be;