diff --git a/lib/modules/SSL.pmod/File.pike b/lib/modules/SSL.pmod/File.pike
index ef8046c875c9d62c55d1bb192b6500bfaa527847..cdce384c56039a796aeef0a650b1960115ba1a5f 100644
--- a/lib/modules/SSL.pmod/File.pike
+++ b/lib/modules/SSL.pmod/File.pike
@@ -1735,14 +1735,14 @@ protected int queue_write()
 {
   if (!conn) return -1;
 
-  // Estimate how much data there is in the write_buffer.
-  int got = sizeof(write_buffer);
-
   int buffer_limit = 16384;
   if (conn->state & CONNECTION_closing) buffer_limit = 1;
 
   int|string res;
-  while (got < buffer_limit) {
+
+  // Allow write_buffer to contain at most buffer_limit + 2^14 + 2048
+  // bytes.
+  while (sizeof(write_buffer) < buffer_limit) {
     res = conn->to_write();
 
 #ifdef SSL3_DEBUG_TRANSPORT
@@ -1762,10 +1762,7 @@ protected int queue_write()
       break;
     }
 
-    int was_empty = !sizeof (write_buffer);
     write_buffer->add(res);
-    got += sizeof(res);
-
     SSL3_DEBUG_MSG ("queue_write: Got %d bytes to write (%d bytes buffered)\n",
 		    sizeof (res), sizeof (write_buffer));
     res = 0;