- From: Richard Atterer <richard@list03.atterer.net>
- Date: Sat, 22 Feb 2003 20:23:27 +0100
- To: www-lib@w3.org
Hello, here is your libwww patch of the day! :-) My previous patch to disable pipeline recovery did not fix the issue entirely - the replacement patch below does. The fix for the "off by one" error I mentioned earlier enables some code which was previously "dead", i.e. never called. That code contains another bug: Because it is called in response to the connection being closed, it must discard the persistent socket of the dropped connection with HTHost_clearChannel(). Cheers, Richard -- __ _ |_) /| Richard Atterer | CS student at the Technische | GnuPG key: | \/¯| http://atterer.net | Universität München, Germany | 0x888354F7 ¯ '` ¯ --- HTHost.c.orig 2003-02-19 01:12:17.000000000 +0100 +++ HTHost.c 2003-02-22 20:05:47.000000000 +0100 @@ -31,7 +31,7 @@ #define TCP_IDLE_ACTIVE 60000L /* Active TTL in ms on an idle connection */ #define MAX_PIPES 50 /* maximum number of pipelined requests */ -#define MAX_HOST_RECOVER 1 /* Max number of auto recovery */ +#define MAX_HOST_RECOVER 0 /* Max number of auto recovery */ #define DEFAULT_DELAY 30 /* Default write flush delay in ms */ struct _HTInputStream { @@ -824,8 +824,10 @@ /* ** First check that we haven't already recovered more than we want */ - if (host->recovered > MAX_HOST_RECOVER) { + if (host->recovered >= MAX_HOST_RECOVER) { HTTRACE(CORE_TRACE, "Host recover %p already %d times - not doing it anymore\n" _ host _ host->recovered); + HTChannel_setSemaphore(host->channel, 0); + HTHost_clearChannel(host, HT_INTERRUPTED); return NO; } @@ -958,7 +960,7 @@ case HT_TP_SINGLE: return count <= 0; case HT_TP_PIPELINE: - return (host->recovered < MAX_HOST_RECOVER) ? + return (host->recovered < MAX_HOST_RECOVER || MAX_HOST_RECOVER==0) ? (count < MaxPipelinedRequests) : (count <= 0); case HT_TP_INTERLEAVE: return YES;
Received on Saturday, 22 February 2003 15:03:56 UTC