X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/23e476e8848cb32352ec802b7f819d35d2f65410..beebc37948c4baf100fd1fc11c2310d6094403be:/server/mr_main.c diff --git a/server/mr_main.c b/server/mr_main.c index 05f116bc..9e61f243 100644 --- a/server/mr_main.c +++ b/server/mr_main.c @@ -4,7 +4,8 @@ * $Header$ * * Copyright (C) 1987 by the Massachusetts Institute of Technology - * + * For copying and distribution information, please see the file + * . * * SMS server process. * @@ -13,61 +14,15 @@ * You are in a maze of twisty little finite automata, all different. * Let the reader beware. * - * $Log$ - * Revision 1.14 1987-09-12 20:41:50 wesommer - * Be paranoid. - * - * Revision 1.14 87/09/12 20:08:01 wesommer - * Add some defensive programming to defend against people who don't - * understand what the contents of the cl struct mean. - * - * Revision 1.13 87/08/04 02:40:30 wesommer - * Do end run around minor hotspot. - * - * Revision 1.12 87/08/04 01:50:00 wesommer - * Rearranged messages. - * - * Revision 1.11 87/07/29 16:04:54 wesommer - * Add keepalive feature. - * - * Revision 1.10 87/06/30 20:02:26 wesommer - * Added returned tuple chain to client structure. - * Added local realm global variable. - * - * Revision 1.9 87/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. - * - * Revision 1.4 87/06/02 20:05:11 wesommer - * Bug fixes on memory allocation. - * - * Revision 1.3 87/06/01 04:34:27 wesommer - * Changed returned error code. - * - * Revision 1.2 87/06/01 03:34:53 wesommer - * Added shutdown, logging. - * - * Revision 1.1 87/05/31 22:06:56 wesommer - * Initial revision - * */ static char *rcsid_sms_main_c = "$Header$"; +#include #include #include #include +#include #include "sms_server.h" extern CONNECTION newconn, listencon; @@ -86,7 +41,8 @@ extern char *whoami; extern char buf1[BUFSIZ]; extern char *takedown; extern int errno; - +extern FILE *journal; +#define JOURNAL "/u1/sms/journal" extern char *malloc(); extern int free(); @@ -97,7 +53,7 @@ extern void do_client(); extern int sigshut(); void clist_append(); void oplist_append(); -extern u_short ntohs(); +void reapchild(); extern time_t now; @@ -154,10 +110,13 @@ main(argc, argv) */ if ((status = sms_open_database()) != 0) { - com_err(whoami, status, "when trying to open database."); + com_err(whoami, status, " when trying to open database."); exit(1); } + sanity_check_queries(); + sanity_check_database(); + /* * Set up client array handler. */ @@ -170,17 +129,24 @@ main(argc, argv) */ if ((((int)signal (SIGTERM, sigshut)) < 0) || + (((int)signal (SIGCHLD, reapchild)) < 0) || (((int)signal (SIGHUP, sigshut)) < 0)) { - com_err(whoami, errno, "Unable to establish signal handler."); + com_err(whoami, errno, " Unable to establish signal handler."); exit(1); } + journal = fopen(JOURNAL, "a"); + if (journal == NULL) { + com_err(whoami, errno, " while opening journal file"); + exit(1); + } + /* * Establish template connection. */ if ((status = do_listen()) != 0) { com_err(whoami, status, - "while trying to create listening connection"); + " while trying to create listening connection"); exit(1); } @@ -188,6 +154,7 @@ main(argc, argv) com_err(whoami, 0, "started (pid %d)", getpid()); com_err(whoami, 0, rcsid_sms_main_c); + send_zgram("SMS", "server started"); /* * Run until shut down. @@ -206,10 +173,10 @@ main(argc, argv) (fd_set *)NULL, (struct timeval *)NULL); if (status == -1) { - com_err(whoami, errno, "error from op_select"); + com_err(whoami, errno, " error from op_select"); continue; } else if (status != -2) { - com_err(whoami, 0, "wrong return from op_select_any"); + com_err(whoami, 0, " wrong return from op_select_any"); continue; } if (takedown) break; @@ -227,12 +194,12 @@ main(argc, argv) do_reset_listen(); } else { com_err(whoami, errno, - "error on listen"); + " error on listen"); exit(1); } } else if ((status = new_connection()) != 0) { com_err(whoami, errno, - "Error on listening operation."); + " Error on listening operation."); /* * Sleep here to prevent hosing? */ @@ -258,6 +225,7 @@ main(argc, argv) } com_err(whoami, 0, "%s", takedown); sms_close_database(); + send_zgram("SMS", takedown); return 0; } @@ -320,7 +288,6 @@ new_connection() */ cp = (client *)malloc(sizeof *cp); bzero(cp, sizeof(*cp)); - cp->state = CL_STARTING; cp->action = CL_ACCEPT; cp->con = newconn; cp->id = counter++; @@ -467,3 +434,20 @@ oplist_delete(oplp, op) } abort(); } + + +void reapchild() +{ + union wait status; + int pid; + + if (takedown) + return; + while ((pid = wait3(&status, WNOHANG, (struct rusage *)0)) > 0) { + if (status.w_termsig == 0 && status.w_retcode == 0) + com_err(whoami, 0, "dcm started successfully"); + else + com_err(whoami, 0, "%d: startdcm exits with signal %d status %d", + pid, status.w_termsig, status.w_retcode); + } +}