]> andersk Git - moira.git/blobdiff - gdb/gdb_fserv.c
Remove `delete_user_by_uid' since it's never been used in any logs we have,
[moira.git] / gdb / gdb_fserv.c
index 4000b35e1f06249ce8cb312d99b6d4237527817e..7275b4ef50d15830ff35df2c434c3a0012ae9894 100644 (file)
@@ -1,11 +1,10 @@
 /*
- *     $Header$
+ * $Header$
  */
 
 #ifndef lint
 static char *rcsid_gdb_fserv_c = "$Header$";
-#endif lint
-
+#endif
 
 
 /************************************************************************
@@ -30,7 +29,11 @@ static char *rcsid_gdb_fserv_c = "$Header$";
 #include <sys/signal.h>
 #include "gdb.h"
 #include <sys/resource.h>
-\f
+#ifdef POSIX
+#include <unistd.h>
+#endif
+
+
 /************************************************************************
  *     
  *                     create_forking_server (create_forking_server)
@@ -96,7 +99,7 @@ int (*validate)();
        g_do_signals();                         /* set up signal handling */
 
        incoming = create_listening_connection(service);
-       if (incoming == NULL)
+       if (incoming == NULL || connection_status(incoming) != CON_UP)
                GDB_GIVEUP("create_forking_server: can't create listening connection")
 
        /*----------------------------------------------------------*/
@@ -113,8 +116,12 @@ int (*validate)();
                                       gdb_sockaddr_of_client, &gdb_socklen,
                                       &gdb_client_tuple);
                if(complete_operation(listenop) != OP_COMPLETE ||
-                  client == NULL) 
-                       GDB_GIVEUP("create_forking_server: failed to accept client")
+                  client == NULL) {
+                   gdb_perror("GDB create_forking_server: failed to accept client");
+                   reset_operation(listenop);
+                   (void) sever_connection(client);
+                   continue;
+                 }
                
 
                 /*
@@ -161,26 +168,24 @@ int (*validate)();
 /*     Called on SIGCHILD to reap all dead children.
 /*     
 /************************************************************************/
+#ifndef POSIX
 int
+#else
+void
+#endif
 gdb_reaper()
 {
+#ifdef POSIX
+       int status;
+#else
        union wait status;
-       extern char *sys_siglist[];
+#endif
        
-       while (wait3(&status, WNOHANG, (struct rusage *)0) >0) {
-#ifdef notdef
-               if (WIFEXITED(status)) {
-                       if (status.w_retcode)
-                               printf("exited with code %d\n",
-                                       status.w_retcode);
-               }
-               if (WIFSIGNALED(status)) {
-                       printf("exited on %s signal%s\n",
-                              sys_siglist[status.w_termsig],
-                              (status.w_coredump?"; core dumped":0));
-               }
-#endif notdef
-       }
+#ifdef POSIX
+       while (waitpid(-1, &status, WNOHANG) >0);
+#else
+       while (wait3(&status, WNOHANG, (struct rusage *)0) >0);
+#endif
 }
 \f
 /************************************************************************/
@@ -194,5 +199,14 @@ gdb_reaper()
 int
 g_do_signals()
 {
-       (void) signal(SIGCHLD, gdb_reaper);
+#ifdef POSIX
+    struct sigaction act;
+
+    act.sa_handler = gdb_reaper;
+    sigemptyset(&act.sa_mask);
+    act.sa_flags = 0;
+    (void) sigaction(SIGCHLD, &act, (struct sigaction *)0);
+#else /* sun */
+    (void) signal(SIGCHLD, gdb_reaper);
+#endif 
 }
This page took 0.036849 seconds and 4 git commands to generate.