summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordjm <djm>2008-07-04 23:40:56 +0000
committerdjm <djm>2008-07-04 23:40:56 +0000
commitca1ffcdb1060e5d59a0c9e9e4a05547da8082153 (patch)
tree4e633e5e5bc2e7e5d73c7f55c263a783997c560b
parent67d7c8371527b30f489e94bf8e2ee4b5e5f7e684 (diff)
downloadopenssh-ca1ffcdb1060e5d59a0c9e9e4a05547da8082153.tar.gz
- OpenBSD CVS Sync
- djm@cvs.openbsd.org 2008/07/04 23:08:25 [packet.c] handle EINTR in packet_write_poll()l ok dtucker@
-rw-r--r--ChangeLog6
-rw-r--r--packet.c13
2 files changed, 13 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index c1df7b87..6cd833b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,10 @@
- (djm) [atomicio.c configure.ac] Disable poll() fallback in atomiciov for
Tru64. readv doesn't seem to be a comparable object there.
bz#1386, patch from dtucker@ ok me
+ - (djm) OpenBSD CVS Sync
+ - djm@cvs.openbsd.org 2008/07/04 23:08:25
+ [packet.c]
+ handle EINTR in packet_write_poll()l ok dtucker@
20080704
- (dtucker) OpenBSD CVS Sync
@@ -4578,4 +4582,4 @@
OpenServer 6 and add osr5bigcrypt support so when someone migrates
passwords between UnixWare and OpenServer they will still work. OK dtucker@
-$Id: ChangeLog,v 1.5060 2008/07/04 23:36:58 djm Exp $
+$Id: ChangeLog,v 1.5061 2008/07/04 23:40:56 djm Exp $
diff --git a/packet.c b/packet.c
index ff22be68..1dda4a29 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.155 2008/06/13 09:44:36 deraadt Exp $ */
+/* $OpenBSD: packet.c,v 1.156 2008/07/04 23:08:25 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1475,16 +1475,19 @@ packet_write_poll(void)
if (len > 0) {
len = write(connection_out, buffer_ptr(&output), len);
- if (len <= 0) {
- if (errno == EAGAIN || errno == EWOULDBLOCK)
+ if (len == -1) {
+ if (errno == EINTR || errno == EAGAIN ||
+ errno == EWOULDBLOCK)
return;
- else
- fatal("Write failed: %.100s", strerror(errno));
+ fatal("Write failed: %.100s", strerror(errno));
}
+ if (len == 0)
+ fatal("Write connection closed");
buffer_consume(&output, len);
}
}
+
/*
* Calls packet_write_poll repeatedly until all pending output data has been
* written.