W3C home > Mailing lists > Public > www-lib@w3.org > January to March 2000

Re: [Bug in HTNet module ?]

From: Mikhail Grouchinski <mgrouch@usa.net>
Date: 21 Feb 00 12:03:53 EST
Message-ID: <20000221170353.27377.qmail@nw128.netaddress.usa.net>
To: AKhassaia@vet.com.au (Amir Khassaia), www-lib@w3.org
I remember this story...

I encountered the same problem since I needed some statistics
from HTNet object in After filter callback. I wasn't able to get
it 'cause HTNet is deleted before the 'After' filter is called.

I modified HTNet.c to call free_net(net) after HTNet_executeAfterAll(request,
status);

function HTNet_delete()

    /* Remove object from the table of Net Objects */
    unregister_net(net);

    /* Call AFTER filters */
    HTNet_executeAfterAll(request, status);
 
    free_net(net);

This created another problem with redirection, so that Henrik
made 'undo' for these changes.

After that I found that changing HTNet.c free_net to

PRIVATE BOOL free_net (HTNet * net)
{
    HTTRACE(CORE_TRACE, 
       "Net Object.. Freeing object %p\n" _ net);
    if (net) {
/*
        This call leads to core dump in some cases (redirection)
        and is not needed ?!
        HTRequest_setNet(net->request, NULL);
*/

        HT_FREE(net);
        return YES;
    }
    return NO;
}

fixes core dump in case of redirection.

This change was never submitted. It works for me,
but it should be tested more carefully...

Does anyone can prove that
 
        HTRequest_setNet(net->request, NULL);

is not required in HTNet.c free_net().

Mikhail Grouchinski


AKhassaia@vet.com.au (Amir Khassaia) wrote:

> --------------------------------------------- 
>	Attachment:  
>	MIME Type: multipart/alternative 
> --------------------------------------------- 
Hi
I have noticed an inconsistency in the WWWlib 5.2.8 source:
In HTNet.c
function HTNet_delete ( )
it says that the After filters need to be called before the deletion of
the HTNet object (big comment below), but in fact the free(net) call is
before the After filter execution started by HTNet_executeAfterAll ( )

Here is the bit of the code from the function :

    /* Remove object from the table of Net Objects */
 unregister_net(net);
        free_net(net);

     /* Call AFTER filters */
 HTNet_executeAfterAll(request, status);  <= This needs to be moved
between unregister and free calls ?

 /*
 ** Truely delete the HTNet object. Thanks to Mikhail Grouchinski
 ** we now do this after having called the after filters so that
 ** these filters can use the information in the Net object
 */

 People agree with me ?


____________________________________________________________________
Get free email and a permanent address at http://www.netaddress.com/?N=1
Received on Monday, 21 February 2000 12:03:57 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:35 GMT