diff --git a/src/iproto.cc b/src/iproto.cc
index 81eec8464139c6c650935b7b619c4cda23627763..5488b5cb969dda4bd8779fa5331167df58fa30c1 100644
--- a/src/iproto.cc
+++ b/src/iproto.cc
@@ -548,7 +548,8 @@ iproto_session_on_input(struct ev_io *watcher,
 static inline struct iobuf *
 iproto_session_output_iobuf(struct iproto_session *session)
 {
-	if (obuf_size(&session->iobuf[1]->out))
+	if (obuf_size(&session->iobuf[1]->out) &&
+	    obuf_size(&session->iobuf[1]->out) > con->write_pos.size)
 		return session->iobuf[1];
 	/*
 	 * Don't try to write from a newer buffer if an older one
@@ -557,7 +558,8 @@ iproto_session_output_iobuf(struct iproto_session *session)
 	 * pieces of replies from both buffers.
 	 */
 	if (ibuf_size(&session->iobuf[1]->in) == 0 &&
-	    obuf_size(&session->iobuf[0]->out))
+	    obuf_size(&session->iobuf[0]->out)
+	    obuf_size(&session->iobuf[0]->out) > con->write_pos.size)
 		return session->iobuf[0];
 	return NULL;
 }