diff options
author | John Kohl <jtkohl@mit.edu> | 1988-02-28 08:05:08 +0000 |
---|---|---|
committer | John Kohl <jtkohl@mit.edu> | 1988-02-28 08:05:08 +0000 |
commit | 1848efb02dac95d029fd3a81ff0f690b0295ceee (patch) | |
tree | dd173644c60ade106a97c7f9f498e6834508d779 /server/server.c | |
parent | 50b9393dd5797b027344248379e78125f3ed8547 (diff) |
add server_dump_servers and supporting interlock code
Diffstat (limited to 'server/server.c')
-rw-r--r-- | server/server.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/server/server.c b/server/server.c index 95c3110..e6d70c7 100644 --- a/server/server.c +++ b/server/server.c @@ -61,6 +61,8 @@ static char rcsid_server_s_c[] = "$Header$"; * void server_kill_clt(client); * ZClient_t *client; * + * void server_dump_servers(fp); + * FILE *fp; */ static void server_hello(), server_flush(), setup_server(); @@ -113,6 +115,9 @@ server_init() register int i; struct in_addr *serv_addr, *server_addrs, limbo_addr; + /* we don't need to mask SIGFPE here since when we are called, + the signal handler isn't set up yet. */ + /* talk to hesiod here, set nservers */ if (!(server_addrs = get_server_addrs(&nservers))) { syslog(LOG_ERR, "No servers?!?"); @@ -188,6 +193,8 @@ server_init() } bzero((caddr_t) srv_nacklist, sizeof(ZNotAcked_t)); srv_nacklist->q_forw = srv_nacklist->q_back = srv_nacklist; + + return; } /* note: these must match the order given in zserver.h */ @@ -324,16 +331,19 @@ struct sockaddr_in *who; ZServerDesc_t *temp; register int i; long timerval; + int omask = sigblock(sigmask(SIGFPE)); /* don't do ascii dumps */ if (who->sin_port != sock_sin.sin_port) { zdbug((LOG_DEBUG, "srv_register wrong port %d", ntohs(who->sin_port))); + (void) sigsetmask(omask); return(1); } /* Not yet... talk to ken about authenticators */ #ifdef notdef if (!auth) { zdbug((LOG_DEBUG, "srv_register unauth")); + (void) sigsetmask(omask); return(1); } #endif notdef @@ -341,6 +351,7 @@ struct sockaddr_in *who; temp = (ZServerDesc_t *)malloc((unsigned) ((nservers + 1) * sizeof(ZServerDesc_t))); if (!temp) { syslog(LOG_CRIT, "srv_reg malloc"); + (void) sigsetmask(omask); return(1); } bcopy((caddr_t) otherservers, (caddr_t) temp, nservers * sizeof(ZServerDesc_t)); @@ -365,6 +376,7 @@ struct sockaddr_in *who; zdbug((LOG_DEBUG, "srv %s is %s", inet_ntoa(otherservers[nservers].zs_addr.sin_addr), srv_states[(int) otherservers[nservers].zs_state])); + (void) sigsetmask(omask); return(0); } #endif notdef @@ -1517,3 +1529,25 @@ struct sockaddr_in *who; server_queue(me_server, packlen, pack, auth, who); return; } + +/* + * dump info about servers onto the fp. + * assumed to be called with SIGFPE blocked + * (true if called from signal handler) + */ +void +server_dump_servers(fp) +FILE *fp; +{ + register int i; + + for (i = 0; i < nservers ; i++) { + (void) fprintf(fp, "%d:%s/%s%s\n", + i, + inet_ntoa(otherservers[i].zs_addr.sin_addr), + srv_states[(int) otherservers[i].zs_state], + otherservers[i].zs_dumping ? " (DUMPING)" : ""); + } + + return; +} |