Index: uspace/lib/hound/src/protocol.c
===================================================================
--- uspace/lib/hound/src/protocol.c	(revision c5d6f9cf7bf19108c2213e15ebc4ff2336319753)
+++ uspace/lib/hound/src/protocol.c	(revision 60e5696d7203fade9af5cc9727a0546015a01269)
@@ -486,4 +486,5 @@
 	ipc_call_t call;
 	size_t size = 0;
+	int ret_answer = EOK;
 	while (async_data_write_receive_call(&callid, &call, &size)
 	    || (IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_DRAIN)) {
@@ -495,4 +496,8 @@
 			continue;
 		}
+		if (ret_answer != EOK) {
+			async_answer_0(callid, ret_answer);
+			continue;
+		}
 		char *buffer = malloc(size);
 		if (!buffer) {
@@ -500,10 +505,9 @@
 			continue;
 		}
-		int ret = async_data_write_finalize(callid, buffer, size);
+		const int ret = async_data_write_finalize(callid, buffer, size);
 		if (ret == EOK) {
-			ret = server_iface->stream_data_write(
+			ret_answer = server_iface->stream_data_write(
 			    stream, buffer, size);
 		}
-		async_answer_0(callid, ret);
 	}
 	const int ret = IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_EXIT
@@ -519,4 +523,5 @@
 	ipc_call_t call;
 	size_t size = 0;
+	int ret_answer = EOK;
 	while (async_data_read_receive_call(&callid, &call, &size)
 	    || (IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_DRAIN)) {
@@ -528,4 +533,8 @@
 			continue;
 		}
+		if (ret_answer != EOK) {
+			async_answer_0(callid, ret_answer);
+			continue;
+		}
 		char *buffer = malloc(size);
 		if (!buffer) {
@@ -535,7 +544,7 @@
 		int ret = server_iface->stream_data_read(stream, buffer, size);
 		if (ret == EOK) {
-			ret = async_data_read_finalize(callid, buffer, size);
-		}
-		async_answer_0(callid, ret);
+			ret_answer =
+			    async_data_read_finalize(callid, buffer, size);
+		}
 	}
 	const int ret = IPC_GET_IMETHOD(call) == IPC_M_HOUND_STREAM_EXIT
