diff --git a/lib/modules/Stdio.pmod/module.pmod b/lib/modules/Stdio.pmod/module.pmod
index 999fb151f018473a6038ef1b8a6f2a7ea36cd34e..a8fa8b7c8660b1936ebf84eae4ead4a6d2fdfcc9 100644
--- a/lib/modules/Stdio.pmod/module.pmod
+++ b/lib/modules/Stdio.pmod/module.pmod
@@ -1,4 +1,4 @@
-// $Id: module.pmod,v 1.46 1999/04/19 20:56:45 grubba Exp $
+// $Id: module.pmod,v 1.47 1999/04/19 21:19:26 grubba Exp $
 
 import String;
 
@@ -809,7 +809,9 @@ static class nb_sendfile
     function(int, mixed ...:void) cb = callback;
     args = 0;
     callback = 0;
-    cb(sent, @a);
+    if (cb) {
+      cb(sent, @a);
+    }
   }
 
   static int do_write()
@@ -846,10 +848,14 @@ static class nb_sendfile
   {
     if (do_write()) {
       if (from) {
-	if (blocking_from) {
-	  do_read();
-	} else {
-	  if (sizeof(to_write) < READER_RESTART) {
+	if (sizeof(to_write) < READER_RESTART) {
+	  if (blocking_from) {
+	    do_read();
+	    if (!sizeof(to_write)) {
+	      // Done.
+	      writer_done();
+	    }
+	  } else {
 	    if (!sizeof(to_write)) {
 	      // Go to sleep.
 	      to->set_nonblocking(0,0,0);
@@ -885,6 +891,7 @@ static class nb_sendfile
     if (sizeof(to_write) && do_write()) {
       call_out(do_blocking, 0);
     } else {
+      // Done.
       from = 0;
       to = 0;
       writer_done();