changeset 547:8029d7368b5a onclient

Make sure the download stream isn't closed twice
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Tue, 14 Sep 2021 09:23:03 +0200 (2021-09-14)
parents eb7ecfbb48f2
children d1f6678f92c5
files src/main/java/org/monetdb/mcl/net/MapiSocket.java
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/mcl/net/MapiSocket.java
+++ b/src/main/java/org/monetdb/mcl/net/MapiSocket.java
@@ -1366,6 +1366,7 @@ public class MapiSocket {	/* cannot (yet
 		private final BlockInputStream.Raw rawIn;
 		private final OutputStream out;
 		private boolean endBlockSeen = false;
+		private boolean closed = false;
 
 		DownloadStream(BlockInputStream.Raw rawIn, OutputStream out) {
 			this.rawIn = rawIn;
@@ -1373,7 +1374,7 @@ public class MapiSocket {	/* cannot (yet
 		}
 
 		void nextBlock() throws IOException {
-			if (endBlockSeen)
+			if (endBlockSeen || closed)
 				return;
 			int ret = rawIn.readBlock();
 			if (ret < 0 || rawIn.wasEndBlock()) {
@@ -1383,13 +1384,15 @@ public class MapiSocket {	/* cannot (yet
 
 		@Override
 		public void close() throws IOException {
+			if (closed)
+				return;
+			closed = true;
 			while (!endBlockSeen) {
 				nextBlock();
 			}
 			// Send acknowledgement to server
 			out.write('\n');
 			out.flush();
-			// And await the acknowledgement of the acknowledgement
 			// Do whatever super has to do
 			super.close();
 		}