diff options
author | Richard Basch <probe@mit.edu> | 1993-09-24 17:18:14 +0000 |
---|---|---|
committer | Richard Basch <probe@mit.edu> | 1993-09-24 17:18:14 +0000 |
commit | 77a043be93791f3ce530a7f099fd3031fec2d47e (patch) | |
tree | 7025daa421e411f790fb8e8566cc93d2978f3277 /server/hostm.c | |
parent | 2b0141e72ae1795c8234e9dd65234f534388a3b9 (diff) |
Changed bcopy/bzero to _BCOPY/_BZERO macros (defined in <zephyr/zephyr_conf.h>)
Added POSIX signal handling
Diffstat (limited to 'server/hostm.c')
-rw-r--r-- | server/hostm.c | 168 |
1 files changed, 156 insertions, 12 deletions
diff --git a/server/hostm.c b/server/hostm.c index 659d199..5814281 100644 --- a/server/hostm.c +++ b/server/hostm.c @@ -237,7 +237,14 @@ hostm_flush(host, server) { register ZClientList_t *clist = NULLZCLT, *clt; losinghost *lhp, *lhp2; +#ifdef POSIX + sigset_t mask, omask; + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif if (!host) { syslog(LOG_WARNING, "null host flush"); @@ -276,7 +283,11 @@ hostm_flush(host, server) uloc_hflush(&host->zh_addr.sin_addr); host_detach(host, server); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -388,8 +399,14 @@ host_lost(arg) Code_t retval; char *buffer; int len; - - int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + sigset_t mask, omask; + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif server = hostm_find_server(&which->lh_host->zh_addr.sin_addr); #if 1 @@ -404,13 +421,17 @@ host_lost(arg) #endif xremque(which); xfree(which); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } xremque(which); hostm_flush(which->lh_host, server); - bzero((caddr_t)¬ice, sizeof(notice)); + _BZERO((caddr_t)¬ice, sizeof(notice)); /* tell other servers to flush this host */ notice.z_kind = HMCTL; @@ -432,7 +453,7 @@ host_lost(arg) xfree(buffer); /* forge a from address */ - bzero((char *) &who, sizeof(who)); + _BZERO((char *) &who, sizeof(who)); who.sin_addr.s_addr = which->lh_host->zh_addr.sin_addr.s_addr; who.sin_port = hm_port; who.sin_family = AF_INET; @@ -440,7 +461,11 @@ host_lost(arg) server_forward(¬ice, 0, &who); /* unauthentic */ xfree(which); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -453,11 +478,21 @@ host_not_losing(who) struct sockaddr_in *who; { losinghost *lhp, *lhp2; +#ifdef POSIX + sigset_t mask, omask; +#else int omask; +#endif if (!losing_hosts) return; - omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif for (lhp = losing_hosts->q_forw; lhp != losing_hosts;) if (lhp->lh_host->zh_addr.sin_addr.s_addr == who->sin_addr.s_addr) { @@ -485,7 +520,11 @@ host_not_losing(who) lhp = lhp2->q_forw; } else lhp = lhp->q_forw; +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -499,11 +538,22 @@ hostm_lose_ignore(client) ZClient_t *client; { losinghost *lhp, *lhp2; +#ifdef POSIX + sigset_t mask, omask; +#else int omask; +#endif + if (!losing_hosts) return; - omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif for (lhp = losing_hosts->q_forw; lhp != losing_hosts;) /* if client matches, remove it */ @@ -523,7 +573,11 @@ hostm_lose_ignore(client) lhp = lhp2->q_forw; } else lhp = lhp->q_forw; +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -537,7 +591,11 @@ hostm_transfer(host, server) ZHostList_t *host; ZServerDesc_t *server; { +#ifdef POSIX + sigset_t mask, omask; +#else int omask; +#endif /* we need to unlink and relink him, and change the table entry */ @@ -551,7 +609,13 @@ hostm_transfer(host, server) if (hostm_find_server(&host->zh_addr.sin_addr) == server) return; - omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif /* remove from old server's queue */ xremque(host); @@ -561,7 +625,11 @@ hostm_transfer(host, server) /* insert in our queue */ xinsque(host, server->zs_hosts); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -577,7 +645,14 @@ host_attach(who, server) { register ZHostList_t *hlist; register ZClientList_t *clist; - int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + sigset_t mask, omask; + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif #if 0 if (zdebug) @@ -587,13 +662,21 @@ host_attach(who, server) /* allocate a header */ if (!(hlist = (ZHostList_t *) xmalloc(sizeof(ZHostList_t)))) { syslog(LOG_WARNING, "hm_attach alloc"); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return(ENOMEM); } /* set up */ if (!(clist = (ZClientList_t *)xmalloc(sizeof(ZClientList_t)))) { xfree(hlist); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return(ENOMEM); } clist->zclt_client = NULLZCNT; @@ -609,7 +692,11 @@ host_attach(who, server) /* chain in to the end of the list */ xinsque(hlist, server->zs_hosts->q_back); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return(ZERR_NONE); } @@ -624,9 +711,22 @@ host_detach(host, server) register ZHostList_t *host; ZServerDesc_t *server; { + ZServerDesc_t *server2; +#ifdef POSIX + sigset_t mask, omask; +#else + int omask; +#endif + /* undo what we did in host_attach */ - int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ - ZServerDesc_t *server2 = hostm_find_server (&host->zh_addr.sin_addr); +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif + server2 = hostm_find_server (&host->zh_addr.sin_addr); if (server2 != server) { syslog(LOG_WARNING, @@ -634,7 +734,11 @@ host_detach(host, server) inet_ntoa (host->zh_addr.sin_addr), server->addr, server2->addr); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -649,7 +753,11 @@ host_detach(host, server) remove_host(host); xfree(host); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -874,7 +982,11 @@ insert_host(host, server) { struct hostlist *oldlist; register int i = 0; +#ifdef POSIX + sigset_t mask, omask; +#else int omask; +#endif #if 0 zdbug ((LOG_DEBUG,"insert_host %s %s", @@ -883,7 +995,13 @@ insert_host(host, server) if (hostm_find_host(&host->zh_addr.sin_addr)) return; - omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif num_hosts++; oldlist = all_hosts; @@ -896,7 +1014,11 @@ insert_host(host, server) if (!oldlist) { /* this is the first */ all_hosts[0].host = host; all_hosts[0].server_index = server - otherservers; +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -916,7 +1038,11 @@ insert_host(host, server) i++; } xfree(oldlist); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif #if defined (DEBUG) && 0 if (zdebug) { register int i = 0; @@ -939,7 +1065,11 @@ remove_host(host) { struct hostlist *oldlist; register int i = 0; +#ifdef POSIX + sigset_t mask, omask; +#else int omask; +#endif #if 0 zdbug((LOG_DEBUG,"remove_host %s", inet_ntoa(host->zh_addr.sin_addr))); @@ -947,14 +1077,24 @@ remove_host(host) if (!hostm_find_host(&host->zh_addr.sin_addr)) return; - omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */ +#ifdef POSIX + (void) sigemptyset(&mask); + (void) sigaddset(&mask, SIGFPE); + (void) sigprocmask(SIG_BLOCK, &mask, &omask); +#else + omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */ +#endif if (--num_hosts == 0) { #if 0 zdbug((LOG_DEBUG,"last host")); #endif xfree (all_hosts); all_hosts = NULLHLT; +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } @@ -979,7 +1119,11 @@ remove_host(host) i++; } xfree (oldlist); +#ifdef POSIX + (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0); +#else (void) sigsetmask(omask); +#endif return; } |