diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 5d3e29ca3a87038e77d85c09a243d07df75a3424..43146fdc29248963bce1065b53a2939a17fd93a3 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1521,6 +1521,8 @@ void output_thread(void* arg)
 					sem_trywait_block(&sbbs->outbuf.highwater_sem,startup->outbuf_drain_timeout);
 				else
 					sem_trywait(&sbbs->outbuf.highwater_sem);	
+				/* We (potentially) blocked, so get fill level again */
+		    	avail=RingBufFull(&sbbs->outbuf);
 			}
 
 			/*
@@ -1529,7 +1531,6 @@ void output_thread(void* arg)
 			 * passed or we've hit highwater.  Read ring buffer
 			 * into linear buffer.
 			 */
-	    	avail=RingBufFull(&sbbs->outbuf);
            	if(avail>sizeof(buf)) {
                	lprintf(LOG_WARNING,"!%s: Insufficient linear output buffer (%lu > %lu)"
 					,node, avail, sizeof(buf));