Thanks for the explanation Padraig, Eric,

Eric:

On Tue, Sep 22, 2009 at 1:12 AM, Eric Day <[email protected]> wrote:
> If
> you're hitting a bug where there is an invalid address in one of the
> pointers, something was not properly cleaned up previously.

This is the bug that I was referring to:
https://bugs.launchpad.net/drizzle/+bug/432210

While I managed to fix them, I don't really like the solution I came
up with for the second crash (only call
drizzle_result_free(&res); if we got a DRIZZLE_RETURN_OK

I tried to find where all pointer in res were supposed to be freed,
but I couldn't :(

Thanks

Diego


>
> -Eric
>
> On Mon, Sep 21, 2009 at 10:19:58PM -0400, Padraig O'Sullivan wrote:
>> On Mon, Sep 21, 2009 at 9:53 PM, Diego Medina <[email protected]> wrote:
>> > Hi,
>> >
>> > In libdrizzle/column.c:355 we have:
>> >
>> > void drizzle_column_free(drizzle_column_st *column)
>> > {
>> >  if (column->result->column_list == column)
>> >    column->result->column_list= column->next;
>> >  if (column->prev)
>> >    column->prev->next= column->next;
>> >  if (column->next)
>> >    column->next->prev= column->prev;
>> >
>> >  if (column->options & DRIZZLE_COLUMN_ALLOCATED)
>> >    free(column);
>> > }
>> >
>> > why can't is just be
>> >
>> >  if (column->options & DRIZZLE_COLUMN_ALLOCATED)
>> >    free(column);
>>
>> From not knowing the above code, it looks to me like it is removing
>> column from a doubly-linked list before freeing the memory allocated
>> for column. This statement:
>>
>> if (column->result->column_list == column)
>>   column->result->column_list= column->next;
>>
>> looks like it modifies the head of the linked list i.e. if the node to
>> be deleted is the head, modify the head to point to the next in the
>> list.
>>
>> These statements:
>>
>> if (column->prev)
>>   column->prev->next= column->next;
>> if (column->next)
>>   column->next->prev= column->prev;
>>
>> just splice the node to be deleted out of the linked list by modifying
>> the successor and predecessor pointers of column's successor and
>> predecessor.
>>
>> So yeah, I would assume this code is needed.
>>
>> -Padraig
>>
>> >
>> > ?
>> >
>> > Thanks
>> >
>> >   -Diego
>> >
>> > P.S. oh, why do I ask, there are times when
>> > column->result->column_list  points to an address that cannot be
>> > accessed (like in this bug
>> > https://bugs.launchpad.net/drizzle/+bug/432210 )
>> > I fixed that one bug, but now I see a new one because
>> > column->prev->next is in an address that cannot be accessed :|
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Diego Medina
>> > Web Developer
>> > http://www.fmpwizard.com
>> >
>> > _______________________________________________
>> > Mailing list: https://launchpad.net/~drizzle-discuss
>> > Post to     : [email protected]
>> > Unsubscribe : https://launchpad.net/~drizzle-discuss
>> > More help   : https://help.launchpad.net/ListHelp
>> >
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~drizzle-discuss
>> Post to     : [email protected]
>> Unsubscribe : https://launchpad.net/~drizzle-discuss
>> More help   : https://help.launchpad.net/ListHelp
>



-- 
Diego Medina
Web Developer
http://www.fmpwizard.com

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to