]> andersk Git - moira.git/blobdiff - server/mr_main.c
Performance work, rearrangement of include files.
[moira.git] / server / mr_main.c
index a5a12facaca0a31beacfbf57534b0e7932aef260..e95fff0a4ef8b8d7e9f4abf2c2e0c1591d7f5917 100644 (file)
  *     Let the reader beware.
  * 
  *     $Log$
- *     Revision 1.6  1987-06-03 17:41:00  wesommer
- *     Added startup support.
+ *     Revision 1.9  1987-06-21 16:39:54  wesommer
+ *     Performance work, rearrangement of include files.
  *
+ * Revision 1.8  87/06/09  18:44:45  wesommer
+ * modified error handling.
+ * 
+ * Revision 1.7  87/06/08  02:44:44  wesommer
+ * Minor lint fix.
+ * 
+ * Revision 1.6  87/06/03  17:41:00  wesommer
+ * Added startup support.
+ * 
  * Revision 1.5  87/06/03  16:07:17  wesommer
  * Fixes for lint.
  * 
@@ -39,7 +48,6 @@ static char *rcsid_sms_main_c = "$Header$";
 #include <strings.h>
 #include <sys/errno.h>
 #include <sys/signal.h>
-#include "sms_private.h"
 #include "sms_server.h"
 
 extern CONNECTION newconn, listencon;
@@ -105,7 +113,9 @@ main(argc, argv)
                com_err(whoami, 0, "GDB initialization failed.");
                exit(1);
        }
-
+       gdb_debug(0); /* this can be patched, if necessary, to enable */
+                     /* GDB level debugging .. */
+       
        /*
         * Database initialization.
         */
@@ -189,7 +199,11 @@ main(argc, argv)
                 * Handle any new connections.
                 */
                if (OP_DONE(listenop)) {
-                       if ((status = new_connection()) != 0) {
+                       if (OP_STATUS(listenop) == OP_CANCELLED) {
+                               com_err(whoami, errno, "Error on listen");
+                               exit(1);
+
+                       } else if ((status = new_connection()) != 0) {
                                com_err(whoami, errno,
                                        "Error on listening operation.");
                                /*
@@ -234,24 +248,24 @@ do_listen()
 int
 new_connection()
 {
-       register client *cp = (client *)malloc(sizeof *cp);
+       register client *cp;
        static counter = 0;
        
        /*
         * Make sure there's been no error
         */
-       if(OP_STATUS(listenop) != OP_COMPLETE ||
-          newconn == NULL) {
+       if(OP_STATUS(listenop) != OP_COMPLETE) {
                return errno;
-#ifdef notdef
-               exit(8); /* XXX */
-#endif notdef
+       }
+       
+       if (newconn == NULL) {
+               return SMS_NOT_CONNECTED;
        }
 
        /*
         * Set up the new connection and reply to the client
         */
-
+       cp = (client *)malloc(sizeof *cp);
        cp->state = CL_STARTING;
        cp->action = CL_ACCEPT;
        cp->con = newconn;
@@ -348,9 +362,10 @@ clist_delete(cp)
        free((char *)clients);
        clients = clients_n;
        clients_n = NULL;
-
+       oplist_delete(op_list, cp->pending_op);
        reset_operation(cp->pending_op);
        delete_operation(cp->pending_op);
+       sever_connection(cp->con);
        free((char *)cp);
 }
 
@@ -373,7 +388,28 @@ oplist_append(oplp, op)
              size_of_list_of_operations((*oplp)->count));
        newlist->count++;
        newlist->op[count-1] = op;
-       db_free((*oplp), size_of_list_of_operations(count-1));
+       db_free((char *)(*oplp), size_of_list_of_operations(count-1));
        (*oplp) = newlist;
 }
 
+
+oplist_delete(oplp, op)
+       LIST_OF_OPERATIONS oplp;
+       register OPERATION op;
+{
+       register OPERATION *s;
+       register int c;
+       
+       for (s = oplp->op, c=oplp->count; c; --c, ++s) {
+               if (*s == op) {
+                       while (c > 0) {
+                               *s = *(s+1);
+                               ++s;
+                               --c;
+                       }
+                       oplp->count--;
+                       return;
+               }
+       }
+       abort();
+}
This page took 0.043971 seconds and 4 git commands to generate.