The unified diff between revisions [41da8c69..] and [f133e7ea..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "src/forward.c"
#  from [0cd445517e0ef996cf13bf0240590d59f635a1ac]
#    to [254eaea3ca5b17eca842698617ef8c65ce15a8bf]
#
============================================================
--- src/forward.c	0cd445517e0ef996cf13bf0240590d59f635a1ac
+++ src/forward.c	254eaea3ca5b17eca842698617ef8c65ce15a8bf
@@ -742,8 +742,10 @@ fwdCheckDeferRead(int fd, void *data)
 	int i = delayMostBytesWanted(mem, INT_MAX);
 	if (0 == i) {
 #if HAVE_EPOLL
-	    mem->serverfd=fd;
-	    commDeferFD(fd);
+            if (fd >= 0) {
+	        mem->serverfd=fd;
+	        commDeferFD(fd);
+            }
 #endif
 	    return 1;
 	}
@@ -764,16 +766,16 @@ fwdCheckDeferRead(int fd, void *data)
 	 * is disk clients pending on a too large object being fetched and a
 	 * few other corner cases.
 	 */
-	if (mem->inmem_hi - mem->inmem_lo > SM_PAGE_SIZE + Config.Store.maxInMemObjSize + READ_AHEAD_GAP) {
+	if (fd >= 0 && mem->inmem_hi - mem->inmem_lo > SM_PAGE_SIZE + Config.Store.maxInMemObjSize + READ_AHEAD_GAP) {
+#if HAVE_EPOLL
 	    EBIT_SET(e->flags, ENTRY_DEFER_READ);
-#if HAVE_EPOLL
 	    mem->serverfd=fd;
 	    commDeferFD(fd);
 #endif
 	    return 1;
 	}
     }
-    if (mem->inmem_hi - storeLowestMemReaderOffset(e) > READ_AHEAD_GAP) {
+    if (fd >= 0 && mem->inmem_hi - storeLowestMemReaderOffset(e) > READ_AHEAD_GAP) {
 	EBIT_SET(e->flags, ENTRY_DEFER_READ);
 #if HAVE_EPOLL
 	mem->serverfd=fd;