summaryrefslogtreecommitdiff
path: root/server/server.c
diff options
context:
space:
mode:
authorGravatar Richard Basch <probe@mit.edu>1994-08-01 04:42:17 +0000
committerGravatar Richard Basch <probe@mit.edu>1994-08-01 04:42:17 +0000
commit0398e01a5032434abef05a26e2f9eeb058fecb31 (patch)
tree33357d7224ffe50ca69fae66053d80df4a150510 /server/server.c
parent6c547bc312ef528815040e42ca5e80233ff98265 (diff)
Don't do signal blocking; simply set a semaphore flag indicating it is
in critical code, and let the main loop deal with the flag being set. This saves on context switches into the kernel for this rare condition.
Diffstat (limited to 'server/server.c')
-rw-r--r--server/server.c39
1 files changed, 6 insertions, 33 deletions
diff --git a/server/server.c b/server/server.c
index f9a333d..96aaf2e 100644
--- a/server/server.c
+++ b/server/server.c
@@ -592,30 +592,12 @@ server_register(notice, auth, who)
ZServerDesc_t *temp;
register int i;
long timerval;
-#ifdef POSIX
- sigset_t mask, omask;
-#else
- int omask;
-#endif
-
-#ifdef POSIX
- (void) sigemptyset(&mask);
- (void) sigaddset(&mask, SIGFPE); /* don't let db dumps start */
- (void) sigprocmask(SIG_BLOCK, &mask, &omask);
-#else
- omask = sigblock(sigmask(SIGFPE));
-#endif
if (who->sin_port != sock_sin.sin_port) {
#if 0
zdbug((LOG_DEBUG, "srv_register wrong port %d",
ntohs(who->sin_port)));
#endif
-#ifdef POSIX
- (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
-#else
- (void) sigsetmask(omask);
-#endif
return 1;
}
/* Not yet... talk to ken about authenticators */
@@ -624,11 +606,6 @@ server_register(notice, auth, who)
#if 0
zdbug((LOG_DEBUG, "srv_register unauth"));
#endif
-#ifdef POSIX
- (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
-#else
- (void) sigsetmask(omask);
-#endif
return 1;
}
#endif /* notdef */
@@ -636,13 +613,11 @@ server_register(notice, auth, who)
temp = (ZServerDesc_t *)xmalloc((unsigned) ((nservers + 1) * sizeof(ZServerDesc_t)));
if (!temp) {
syslog(LOG_CRIT, "srv_reg malloc");
-#ifdef POSIX
- (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
-#else
- (void) sigsetmask(omask);
-#endif
return 1;
}
+
+ START_CRITICAL_CODE;
+
(void) memcpy((caddr_t) temp, (caddr_t) otherservers,
nservers * sizeof(ZServerDesc_t));
xfree(otherservers);
@@ -667,11 +642,9 @@ server_register(notice, auth, who)
zdbug((LOG_DEBUG, "srv %s is %s", otherservers[nservers].addr,
srv_states[(int) otherservers[nservers].zs_state]));
#endif
-#ifdef POSIX
- (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
-#else
- (void) sigsetmask(omask);
-#endif
+
+ END_CRITICAL_CODE;
+
return 0;
}
#endif