diff options
| author | Paul Park <pjpark@mit.edu> | 1995-05-12 20:13:46 +0000 |
|---|---|---|
| committer | Paul Park <pjpark@mit.edu> | 1995-05-12 20:13:46 +0000 |
| commit | b690fdffd77d179a0634b45bf11730cab075bd86 (patch) | |
| tree | 99dace8679f98f45bcd4bb4257a70fc0fcbe5271 /src/kadmin/v5server/proto_serv.c | |
| parent | 9aa0011cba73352abcbe5fe8f8fd6d6a068e9987 (diff) | |
Check for and use POSIX signal/setjmp/longjmp
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5808 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/v5server/proto_serv.c')
| -rw-r--r-- | src/kadmin/v5server/proto_serv.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/kadmin/v5server/proto_serv.c b/src/kadmin/v5server/proto_serv.c index 8def48c6a7..f88811ae32 100644 --- a/src/kadmin/v5server/proto_serv.c +++ b/src/kadmin/v5server/proto_serv.c @@ -57,7 +57,11 @@ static jmp_buf timeout_jmp; static krb5_sigtype proto_alarmclock() { +#if POSIX_SETJMP + siglongjmp(timeout_jmp, 1); +#else /* POSIX_SETJMP */ longjmp(timeout_jmp, 1); +#endif /* POSIX_SETJMP */ /* NOTREACHED */ } @@ -108,6 +112,10 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p) krb5_address *local; krb5_address *remote; +#if POSIX_SIGNALS + struct sigaction s_action; +#endif /* POSIX_SIGNALS */ + char *curr_lang = (char *) NULL; krb5_boolean mime_setting = 0; @@ -130,6 +138,10 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p) remote = (krb5_address *) NULL; ticket = (krb5_ticket *) NULL; rcache = (krb5_rcache) NULL; +#if POSIX_SIGNALS + (void) sigemptyset(&s_action.sa_mask); + s_action.sa_flags = 0; +#endif /* POSIX_SIGNALS */ /* Get memory for addresses */ local = (krb5_address *) malloc(sizeof(krb5_address)); @@ -240,9 +252,20 @@ proto_serv(kcontext, my_id, cl_sock, sv_p, cl_p) * * If enabled, the protocol times out after proto_proto_timeout seconds. */ - if (setjmp(timeout_jmp) == 0) { + if ( +#if POSIX_SETJMP + sigsetjmp(timeout_jmp, 1) == 0 +#else /* POSIX_SETJMP */ + setjmp(timeout_jmp) == 0 +#endif /* POSIX_SETJMP */ + ) { if (proto_proto_timeout > 0) { +#if POSIX_SIGNALS + s_action.sa_handler = proto_alarmclock; + (void) sigaction(SIGALRM, &s_action, (struct sigaction *) NULL); +#else /* POSIX_SIGNALS */ signal(SIGALRM, proto_alarmclock); +#endif /* POSIX_SIGNALS */ } /* * Loop forever - or until somebody puts us out of our misery. |
