diff options
| author | Sam Hartman <hartmans@mit.edu> | 1996-01-26 07:02:51 +0000 |
|---|---|---|
| committer | Sam Hartman <hartmans@mit.edu> | 1996-01-26 07:02:51 +0000 |
| commit | 664516485c6610383af2dd9c0fc4305ed64d8cb7 (patch) | |
| tree | 4fdd577d63c4052f701e20b3056c2e833e4f4d90 /src | |
| parent | 307b6273aa2616e7f11bd1d2ac2fe157cac23bc5 (diff) | |
| download | krb5-664516485c6610383af2dd9c0fc4305ed64d8cb7.tar.gz krb5-664516485c6610383af2dd9c0fc4305ed64d8cb7.tar.xz krb5-664516485c6610383af2dd9c0fc4305ed64d8cb7.zip | |
Fix delay in ^C processing
caused by my OOB fix.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@7392 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
| -rw-r--r-- | src/appl/bsd/ChangeLog | 6 | ||||
| -rw-r--r-- | src/appl/bsd/krlogin.c | 32 |
2 files changed, 27 insertions, 11 deletions
diff --git a/src/appl/bsd/ChangeLog b/src/appl/bsd/ChangeLog index ee6df50b7..c7f26b9dc 100644 --- a/src/appl/bsd/ChangeLog +++ b/src/appl/bsd/ChangeLog @@ -1,3 +1,9 @@ +Fri Jan 26 00:37:23 1996 Sam Hartman <hartmans@tertius.mit.edu> + + * krlogin.c (endif +): +(reader): Deal with exceptions even while writing. + Wed Jan 24 00:34:42 1996 Sam Hartman <hartmans@tertius.mit.edu> * krlogind.M krshd.M: Update to document new options. diff --git a/src/appl/bsd/krlogin.c b/src/appl/bsd/krlogin.c index 0807cd594..34906fe8f 100644 --- a/src/appl/bsd/krlogin.c +++ b/src/appl/bsd/krlogin.c @@ -1295,7 +1295,7 @@ return; */ reader(oldmask) #ifdef POSIX_SIGNALS - sigset_t *oldmask; + sigset_t *oldmask; #else int oldmask; #endif @@ -1305,7 +1305,7 @@ reader(oldmask) #else int pid = -getpid(); #endif -fd_set readset, excset; +fd_set readset, excset, writeset; int n, remaining; char *bufp = rcvbuf; @@ -1324,6 +1324,7 @@ fd_set readset, excset; ppid = getppid(); FD_ZERO(&readset); FD_ZERO(&excset); + FD_ZERO(&writeset); #ifdef POSIX_SIGNALS sigprocmask(SIG_SETMASK, oldmask, (sigset_t*)0); #else @@ -1333,24 +1334,33 @@ FD_ZERO(&readset); #endif /* POSIX_SIGNALS */ for (;;) { - while ((remaining = rcvcnt - (bufp - rcvbuf)) > 0) { + if ((remaining = rcvcnt - (bufp - rcvbuf)) > 0) + { + FD_SET(1,&writeset1); rcvstate = WRITING; - n = write(1, bufp, remaining); - if (n < 0) { - if (errno != EINTR) - return (-1); - continue; - } - bufp += n; + FD_CLR(rem, &readset); } + else { + bufp = rcvbuf; rcvcnt = 0; rcvstate = READING; FD_SET(rem,&readset); + FD_CLR(1,&writeset); + } FD_SET(rem,&excset); if (select(rem+1, &readset, 0, &excset, 0) > 0 ) { -if (FD_ISSET(rem, &excset)) + if (FD_ISSET(rem, &excset)) oob(); + if (FD_ISSET(1,&writeset)) { + n = write(1, bufp, remaining); + if (n < 0) { + if (errno != EINTR) + return (-1); + continue; + } + bufp += n; +} if (FD_ISSET(rem, &readset)) { rcvcnt = des_read(rem, rcvbuf, sizeof (rcvbuf)); if (rcvcnt == 0) |
