Should pipelining be off by default ?

From: Miquel van Smoorenburg <[email protected]>
Date: 14 Jul 1999 14:45:50 +0200

How stable is the pipelining support in squid-2.2.STABLE4 ? I'm maintaining
the Debian package of squid, and I'm still using the patch below (with
an explanation from Henrik).

  From: <ieure@crosssound.narrows.com>
  Message-Id: <m103AIF-0009aqC@Phaktory.crosssound.net>
  Date: Wed, 20 Jan 1999 18:56:27 -0800 (PST)
  Subject: squid: squid crashes when prefetching http 1.1 pipelined requests
  To: submit@bugs.debian.org

Package: squid
Version: 2.1.2-1

Using tools such as apt-get through a squid proxy will make the squid crash.
Squid restarts, but the apt-get session is interrupted and must be restarted.

According to Henrik Nordstrom, a squid developer:

---snip---
> Using tools such as Debian's apt-get (automated package download/install
> tool) through a squid proxy will cause it to segfault repeatedly. I have
> verified this a a problem in both Squid 2.0.PATCH2 and Squid 2.1.PATCH2.

Yes. The current pipelining implementation is not very stable. You can
disable Squids prefetching of pipelined requests by changing a line in
client_side.c:

        if (nrequests >= 2) {
to
        if (nrequests >= 1) {

By default Squid tries to fetch two objects simoultaneously and
deferring the delivery of the second object until the first is sent, but
it crashes badly if something bad happens with this second request while
the first one is being processed.
---snip---

The source should be patched as such, as this is a rather nasty problem.

--- squid-2.2.1/src/client_side.c.orig Sun Apr 11 09:18:53 1999
+++ squid-2.2.1/src/client_side.c Mon Apr 19 16:14:05 1999
@@ -2202,7 +2202,11 @@
             break;
         /* Limit the number of concurrent requests to 2 */
         for (H = &conn->chr, nrequests = 0; *H; H = &(*H)->next, nrequests++);
+#if 0 /* BUGGY */
         if (nrequests >= 2) {
+#else
+ if (nrequests >= 1) {
+#endif
             debug(33, 2) ("clientReadRequest: FD %d max concurrent requests reached\n", fd);
             debug(33, 5) ("clientReadRequest: FD %d defering new request until one is done\n", fd);
             conn->defer.until = squid_curtime + 100; /* Reset when a request is complete */

Mike.

-- 
Beware of Programmers who carry screwdrivers.
-- 
The From: and Reply-To: addresses are internal news2mail gateway addresses.
Reply to the list or to miquels@cistron.nl (Miquel van Smoorenburg)
Received on Wed Jul 14 1999 - 06:35:22 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:47:23 MST