Actually in this specific case (request entity reading) the supposed
behaviour is to defer reading until there is space, but maybe that part
has got lost somewhere on the way (was too long since I wrote the
request entity reading changes), or there is a case not properly
covered.
/Henrik
Duane Wessels wrote:
> 
> yeah, looks broken.  The conn->in.buf buffer is supposed to
> be grown later in this function, around line 2830.  But that
> line is contained inside this while block:
> 
>    2665     while (conn->in.offset > 0 && conn->body.size_left == 0) {
> 
> The while statement is not true in your case, so the buffer never
> grows.
> 
> Duane W.
> 
> On Tue, 13 Mar 2001, Vladimir B. Savkin wrote:
> 
> > Investigating why Squid sometimes starts to consume 100% CPU time I added
> > some debugging code I found the following:
> >
> > <SCREENSHOT>
> > (gdb) step
> > clientReadRequest (fd=39, data=0x90f10b8) at client_side.c:2597
> > 2597        int parser_return_code = 0;
> > (gdb) list
> > 2592
> > 2593    static void
> > 2594    clientReadRequest(int fd, void *data)
> > 2595    {
> > 2596        ConnStateData *conn = data;
> > 2597        int parser_return_code = 0;
> > 2598        int k;
> > 2599        request_t *request = NULL;
> > 2600        int size;
> > 2601        void *p;
> > (gdb) print *conn
> > $10 = {fd = 39, in = {
> >     buf = 0x90f1160 "scheme=black&attack=on&damage=on&speech=on&majmsg=on&minmsg=on&hurted=on&underl=on&extras=on&nukecc=on&output=document&text=%3C277hp+647m+351mv%3E+Invoker%27s+Guild%0D%0A+%0D%0A%5BExits%3A+west+up%5D%"...,
> >     offset = 4095, size = 4096}, body = {size_left = 5903, request = 0x0,
> >     buf = 0x0, bufsize = 0, callback = 0, cbdata = 0x0},
> >   auth_type = AUTH_UNKNOWN, auth_user_request = 0x0, chr = 0x89a7078, peer = {
> >     sin_family = 2, sin_port = 52632, sin_addr = {s_addr = 34449600},
> >     sin_zero = "\016°LÏ\177è\023À"}, me = {sin_family = 2, sin_port = 14348,
> >     sin_addr = {s_addr = 118335680}, sin_zero = "\016°LÏ\177è\023À"},
> >   log_addr = {s_addr = 34449600}, rfc931 = '\000' <repeats 63 times>,
> >   nrequests = 1, defer = {n = 0, until = 0}}
> > (gdb) step
> > 2605        char *prefix = NULL;
> > (gdb) step
> > 2607        fde *F = &fd_table[fd];
> > (gdb) step
> > 2608        int len = conn->in.size - conn->in.offset - 1;
> > (gdb) step
> > 2609        debug(33, 4) ("clientReadRequest: FD %d: reading request...\n", fd);
> > (gdb) print len
> > $11 = 0
> > (gdb) print *F
> > $12 = {type = 3, local_port = 3128, remote_port = 39117,
> >   ipaddr = "192.168.13.2\000\000\000",
> >   desc = "http://carrion.gameshadow.com/cgi-box/logformat.pl", '\000' <repeats 13 times>, flags = {open = 1, close_request = 0, write_daemon = 0, closing = 0
> >     socket_eof = 0, nolinger = 0, nonblocking = 1, ipc = 0,
> >     called_connect = 0}, bytes_read = 4499, bytes_written = 0, uses = 0,
> >   disk = {wrt_handle = 0, wrt_handle_data = 0x0, write_q = 0x0,
> >     write_q_tail = 0x0, offset = 0}, read_handler = 0, read_data = 0x90f10b8,
> >   write_handler = 0, write_data = 0x0,
> >   timeout_handler = 0x805fa60 <clientLifetimeTimeout>, timeout = 984504745,
> >   timeout_data = 0x89a7078, lifetime_data = 0x0, close_handler = 0x9454c10,
> >   defer_check = 0x805eba0 <clientReadDefer>, defer_data = 0x90f10b8,
> >   rwstate = 0x0}
> > </SCREENSHOT>
> >
> > Client 193.232.13.2 is a downstream proxy.
> >
> > I track CVS HEAD revision of Squid and use Linux 2.4.2-ac1.
> >
> > Do I need to provide additional info?
> > It usually takes several hours before it happens.
> >
> >
> > :wq
> >                                         With best regards,
> >                                            Vladimir Savkin.
> >
> >
Received on Tue Mar 13 2001 - 15:47:14 MST
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:13:38 MST