- From: Gustaf Neumann <neumann@nestroy.wi-inf.uni-essen.de>
- Date: Sat Jun 14 15:23:34 1997
- To: johnn@dascom.com
- Cc: www-lib-bugs@w3.org
In your message from [Fri, 13 Jun 1997 14:40:27 -0700] you wrote:
: Yes. I'm running into some mysterious access violations in
: HTHost_forceFlush. The request structure in the HTNet * returned from
: host->pipeline seems to be corrupt or uninitialized. Actually, the
: pipeline itself looks suspicious since the first object is null too.
: However, this is just with a single request at a time and I'm not trying
: to kill anything.
i remember that i saw the empty first element in the pipeline, but
it stopped bothering me (maybe due to my patches or due to "luck").
I will use this opportunity to explain my killing-request problem:
The code in HTHost_free (HTHost * host, int status) seems suspicious to me,
if one simplifies the ifdes, it comes down to
PUBLIC BOOL HTHost_free (HTHost * host, int status)
{
if (host->channel == NULL) return NO;
if (host->persistent && !host->close_notification &&
(!host->reqsPerConnection ||
(host->reqsPerConnection && host->reqsMade < host->reqsPerConnection)))
{
if (CORE_TRACE)
HTTrace("Host Object. keeping socket %d\n", HTChannel_socket(host->channel));
HTChannel_delete(host->channel, status);
} else {
if (CORE_TRACE)
HTTrace("Host Object. closing socket %d\n", HTChannel_socket(host->channel));
/*
** By lowering the semaphore we make sure that the channel
** is gonna be deleted
*/
HTChannel_downSemaphore(host->channel);
HTHost_clearChannel(host, status);
}
return YES;
}
which comes down to:
if the host is marked as persistent and
there are either
no pipelined requests allowed or
the requests made are less then the max number of pipelined requests
then
do an unconditional delete of the data structures
else
lower the semaphore and clear the channel
The first case is for the truly persistent host.
HTChannel_delete() frees or aborts the streams and uses the semaphore
as a guard when to free the channel. There are many things strange for me
- why is no HTHost_clearChannel() in the first case?
(HTEvent_unregister(), resetting the structure, HTChannel_delete())
- why are no semaphores increased when the persistent channel is reused
and a reuqest is put into the pipeline?
- how is the deletion of a single request from the pipeline handled?
HTNet_delete() calls HTHost_free(), so either HTHost_free handles the
pipelined case or HTNet_delete() must be made more clever.
The trace messages in the code above do not seem resemble what's going on
here as well.
Comments?
: Please post any patches you come up with for HTHost ....
i have mailed to you my patches for HTHost.c. I have a couple of other fixes
as well, they heal some of the symptoms, but i am not convinced that these are
the best solution. Once i think these are correct, i will post them here.
-gustaf
--
Wirtschaftsinformatik und Softwaretechnik
Universitaet GH Essen, FB5
Altendorfer Strasse 97-101, Eingang B, D-45143 Essen
Tel.: +49 (0201) 81003-74, Fax: +49 (0201) 81003-73
Gustaf.Neumann@uni-essen.de
http://nestroy.wi-inf.uni-essen.de/Neumann.html
Received on Saturday, 14 June 1997 15:23:34 UTC