Thomas Meier wrote:
im also have this error:
2009/07/30 09:48:16| HttpMsg.cc(157) first line of HTTP message is invalid
2009/07/30 09:48:16| assertion failed: http.cc:738: "!eof"
2009/07/30 09:48:19| Starting Squid Cache version 3.0.STABLE17 for
sparc-sun-sol
aris2.9...
2009/07/30 09:48:19| Process ID 17345
2009/07/30 09:48:19| With 32768 file descriptors available
2009/07/30 09:48:19| Performing DNS Tests...
2009/07/30 09:48:19| Successful DNS name lookup tests...
####
2009/07/30 09:47:38| assertion failed: http.cc:738: "!eof"
2009/07/30 09:48:16| assertion failed: http.cc:738: "!eof"
2009/07/30 09:48:46| assertion failed: http.cc:738: "!eof"
2009/07/30 09:48:58| assertion failed: http.cc:738: "!eof"
2009/07/30 09:49:44| assertion failed: http.cc:738: "!eof"
2009/07/30 09:49:53| assertion failed: http.cc:738: "!eof"
2009/07/30 09:50:02| assertion failed: http.cc:738: "!eof"
2009/07/30 09:51:33| assertion failed: http.cc:738: "!eof"
2009/07/30 09:51:39| assertion failed: http.cc:738: "!eof"
2009/07/30 09:51:45| assertion failed: http.cc:738: "!eof"
2009/07/30 09:52:26| assertion failed: http.cc:738: "!eof"
2009/07/30 09:53:02| assertion failed: http.cc:738: "!eof"
2009/07/30 09:53:12| assertion failed: http.cc:738: "!eof"
2009/07/30 09:53:22| assertion failed: http.cc:738: "!eof"
2009/07/30 09:53:30| assertion failed: http.cc:738: "!eof"
2009/07/30 09:54:32| assertion failed: http.cc:738: "!eof"
2009/07/30 09:55:35| assertion failed: http.cc:738: "!eof"
2009/07/30 09:57:04| assertion failed: http.cc:738: "!eof"
2009/07/30 09:57:41| assertion failed: http.cc:738: "!eof"
2009/07/30 09:57:57| assertion failed: http.cc:738: "!eof"
2009/07/30 09:58:22| assertion failed: http.cc:738: "!eof"
2009/07/30 09:59:31| assertion failed: http.cc:738: "!eof"
2009/07/30 09:59:44| assertion failed: http.cc:738: "!eof"
2009/07/30 09:59:59| assertion failed: http.cc:738: "!eof"
2009/07/30 10:01:13| assertion failed: http.cc:738: "!eof"
2009/07/30 10:01:48| assertion failed: http.cc:738: "!eof"
2009/07/30 10:02:29| assertion failed: http.cc:738: "!eof"
2009/07/30 10:02:34| assertion failed: http.cc:738: "!eof"
2009/07/30 10:02:41| assertion failed: http.cc:738: "!eof"
2009/07/30 10:03:51| assertion failed: http.cc:738: "!eof"
back to stable 13 the good old unfixed Problem is back:
2009/07/30 11:05:05| tunnelReadServer: FD 377: read failure: (0) Error 0
2009/07/30 11:05:16| tunnelReadServer: FD 211: read failure: (0) Error 0
2009/07/30 11:05:20| tunnelReadServer: FD 462: read failure: (0) Error 0
2009/07/30 11:05:32| tunnelReadServer: FD 437: read failure: (0) Error 0
2009/07/30 11:05:36| tunnelReadServer: FD 340: read failure: (0) Error 0
2009/07/30 11:05:41| tunnelReadServer: FD 432: read failure: (0) Error 0
2009/07/30 11:06:13| assertion failed: store_client.cc:430:
"STORE_DISK_CLIENT =
= getType()"
2009/07/30 11:06:18| Starting Squid Cache version 3.0.STABLE13 for
sparc-sun-sol
aris2.9...
> On Tuesday 28 July 2009 23:22:56 Amos Jeffries wrote:
>> The next formally bundled will be STABLE18. However the daily
snapshots
>> serve as intermediate updates on STABLE
>> (http://www.squid-cache.org/Versions/v3/3.0/).
>>
>> I just have not yet had time to apply these fixes to the branch yet.
> > > 3.0.STABLE17-20090729 still crashing here (x86_64)...
> > 2009/07/29 16:07:45| ctx: enter level 0: >
'http://images.windowsmedia.com/svcswitch/MG_pt-
> br.xml?locale=416&geoid=20&version=1
>
1.0.6001.7004&userlocale=416'
> > 2009/07/29 16:07:45| assertion failed: http.cc:738: "!eof" > > I
also applied (the patch from previous e-mail) against this version:
> > patching file src/HttpMsg.cc
> patching file src/HttpReply.cc
> patching file src/HttpRequest.cc
> patching file src/pconn.cc
> > The only solution here was downgrade to previous release...
> > Any clue?
It seems to be a fread() issue between Squid and x86_64. Disappears on
i386/i686.
Maybe *BSD specific as well, but there are a few reports without OS info
fuzzing my info there.
I plan on spending more time over the weekend adding good tracing info to
find it.
Okay. This gets rid of the assert and adds some debug instead.
The reason for sending eof=1 when not at true EOF is not yet clear, so
use carefully, but additional debugs are added when the flag is set.
debug_options ... 11,9 for these.
Amos
--
Please be using
Current Stable Squid 2.7.STABLE6 or 3.0.STABLE17
Current Beta Squid 3.1.0.12
=== modified file 'src/http.cc'
--- src/http.cc 2009-07-26 10:54:29 +0000
+++ src/http.cc 2009-07-31 06:44:31 +0000
@@ -710,42 +710,50 @@
HttpReply *newrep = new HttpReply;
const bool parsed = newrep->parse(readBuf, eof, &error);
- if(!parsed && readBuf->contentSize() > 5 && strncmp(readBuf->content(), "HTTP/", 5) != 0){
- MemBuf *mb;
- HttpReply *tmprep = new HttpReply;
- tmprep->sline.version = HttpVersion(1, 0);
- tmprep->sline.status = HTTP_OK;
- tmprep->header.putTime(HDR_DATE, squid_curtime);
- tmprep->header.putExt("X-Transformed-From", "HTTP/0.9");
- mb = tmprep->pack();
- newrep->parse(mb, eof, &error);
- delete tmprep;
- }
- else{
- if (!parsed && error > 0) { // unrecoverable parsing error
- debugs(11, 3, "processReplyHeader: Non-HTTP-compliant header: '" << readBuf->content() << "'");
- flags.headers_parsed = 1;
- newrep->sline.version = HttpVersion(1, 0);
- newrep->sline.status = error;
- HttpReply *vrep = setVirginReply(newrep);
- entry->replaceHttpReply(vrep);
- ctx_exit(ctx);
- return;
- }
-
- if (!parsed) { // need more data
- assert(!error);
- assert(!eof);
- delete newrep;
- ctx_exit(ctx);
- return;
- }
-
- debugs(11, 9, "GOT HTTP REPLY HDR:\n---------\n" << readBuf->content() << "\n----------");
-
- header_bytes_read = headersEnd(readBuf->content(), readBuf->contentSize());
- readBuf->consume(header_bytes_read);
- }
+ if(!parsed) {
+
+ if(readBuf->contentSize() > 5 && strncmp(readBuf->content(), "HTTP/", 5) != 0) { // HTTP legacy 0.9
+ MemBuf *mb;
+ HttpReply *tmprep = new HttpReply;
+ tmprep->sline.version = HttpVersion(1, 0);
+ tmprep->sline.status = HTTP_OK;
+ tmprep->header.putTime(HDR_DATE, squid_curtime);
+ tmprep->header.putExt("X-Transformed-From", "HTTP/0.9");
+ mb = tmprep->pack();
+ newrep->parse(mb, eof, &error);
+ delete tmprep;
+ }
+ else if (error > 0) { // unrecoverable parsing error
+ debugs(11, 3, "processReplyHeader: Non-HTTP-compliant header: '" << readBuf->content() << "'");
+ flags.headers_parsed = 1;
+ newrep->sline.version = HttpVersion(1, 0);
+ newrep->sline.status = error;
+ HttpReply *vrep = setVirginReply(newrep);
+ entry->replaceHttpReply(vrep);
+ ctx_exit(ctx);
+ return;
+ }
+ else if (eof) { // EOF but non-parsed ?!
+ /* AYJ: 2009-07-26: this _should_ only occur on aborted connections.
+ * Unfortunately:
+ * - may occur on persistent connections closed by a broken server mid-headers.
+ * - some platforms when read returns zero bytes despite connection remaining live.
+ */
+ debugs(11, 2, "EOF in non-complete HTTP reply header (" << readBuf.size() << " bytes):\n---------\n" << readBuf->content() << "\n----------");
+ delete newrep;
+ ctx_exit(ctx);
+ return;
+ }
+ else { // !error && !eof -> need more data
+ delete newrep;
+ ctx_exit(ctx);
+ return;
+ }
+ }
+
+ debugs(11, 9, "GOT HTTP REPLY HDR:\n---------\n" << readBuf->content() << "\n----------");
+ header_bytes_read = headersEnd(readBuf->content(), readBuf->contentSize());
+ readBuf->consume(header_bytes_read);
flags.chunked = 0;
if (newrep->header.hasListMember(HDR_TRANSFER_ENCODING, "chunked", ',')) {
@@ -1002,7 +1010,7 @@
}
// update I/O stats
- if (len > 0) {
+ if (len => 0) {
readBuf->appended(len);
reply_bytes_read += len;
#if DELAY_POOLS
@@ -1045,6 +1053,7 @@
#endif
if (len == 0) { // reached EOF?
+ debugs(11, 2, "Reached EOF for HTTP reply on FD " << fd << ". flag=" << flag);
eof = 1;
flags.do_next_read = 0;
}