diff common-channel.c @ 938:c88dce72f6d2

Make sure client exit messages don't get lost
author Matt Johnston <matt@ucc.asn.au>
date Wed, 09 Jul 2014 00:13:17 +0800
parents 4ad38e223ccd
children 5daedffd0769
line wrap: on
line diff
--- a/common-channel.c	Tue Jul 08 21:59:36 2014 +0800
+++ b/common-channel.c	Wed Jul 09 00:13:17 2014 +0800
@@ -574,14 +574,16 @@
 	}
 
 
-	/* close the FDs in case they haven't been done
-	 * yet (they might have been shutdown etc) */
-	TRACE(("CLOSE writefd %d", channel->writefd))
-	close(channel->writefd);
-	TRACE(("CLOSE readfd %d", channel->readfd))
-	close(channel->readfd);
-	TRACE(("CLOSE errfd %d", channel->errfd))
-	close(channel->errfd);
+	if (IS_DROPBEAR_SERVER || (channel->writefd != STDOUT_FILENO)) {
+		/* close the FDs in case they haven't been done
+		 * yet (they might have been shutdown etc) */
+		TRACE(("CLOSE writefd %d", channel->writefd))
+		close(channel->writefd);
+		TRACE(("CLOSE readfd %d", channel->readfd))
+		close(channel->readfd);
+		TRACE(("CLOSE errfd %d", channel->errfd))
+		close(channel->errfd);
+	}
 
 	if (!channel->close_handler_done
 		&& channel->type->closehandler) {