From ff705842f5a1f6bcd54201c5d3deb8e2498a1e89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Mon, 19 Apr 1999 23:19:26 +0200
Subject: [PATCH] Fixed some more bugs in Stdio.sendfile().

Rev: lib/modules/Stdio.pmod/module.pmod:1.47
---
 lib/modules/Stdio.pmod/module.pmod | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/lib/modules/Stdio.pmod/module.pmod b/lib/modules/Stdio.pmod/module.pmod
index 999fb151f0..a8fa8b7c86 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();
-- 
GitLab