/*
- * $Id: forward.cc,v 1.149 2006/08/25 15:22:34 serassio Exp $
+ * $Id: forward.cc,v 1.150 2006/09/02 10:03:20 adrian Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
storeRegisterAbort(e, FwdState::abort, this);
}
-FwdState::~FwdState()
+void
+FwdState::completed()
{
- debugs(17, 3, HERE << "FwdState destructor starting");
+ if (flags.forward_completed == 1) {
+ debugs(17, 1, HERE << "FwdState::completed called on a completed request! Bad!");
+ return;
+ }
+ flags.forward_completed = 1;
+
#if URL_CHECKSUM_DEBUG
entry->mem_obj->checkUrlChecksum();
if (storePendingNClients(entry) > 0)
assert(!EBIT_TEST(entry->flags, ENTRY_FWD_HDR_WAIT));
+}
+
+FwdState::~FwdState()
+{
+ debugs(17, 3, HERE << "FwdState destructor starting");
+ if (! flags.forward_completed)
+ completed();
+
serversFree(&servers);
HTTPMSGUNLOCK(request);
debug(17, 3) ("fwdStateFree: closing FD %d\n", fd);
comm_close(fd);
}
-
debugs(17, 3, HERE << "FwdState destructor done");
}
default:
FwdState *fwd = new FwdState(client_fd, entry, request);
+ fwd->flags.forward_completed = 0;
peerSelect(request, entry, fwdStartCompleteWrapper, fwd);
return;
}
debug(17, 3) ("fwdComplete: not re-forwarding status %d\n",
entry->getReply()->sline.status);
EBIT_CLR(entry->flags, ENTRY_FWD_HDR_WAIT);
- entry->complete();
+ completed();
}
}
/*
- * $Id: ftp.cc,v 1.402 2006/09/02 03:35:52 adrian Exp $
+ * $Id: ftp.cc,v 1.403 2006/09/02 10:03:20 adrian Exp $
*
* DEBUG: section 9 File Transfer Protocol (FTP)
* AUTHOR: Harvest Derived
safe_free(filepath);
safe_free(data.host);
-
fwd = NULL; // refcounted
}