Padraig is correct, libdrizzle keeps a list of objects created within it's parent context (connections in drizzle objects, results for connections, columns in results, ...). This is needed for the buffered result interface. While this is not strictly required for the non-buffered interfaces, it makes less code paths within libdrizzle. Either way, you need to free the column result properly. If you're hitting a bug where there is an invalid address in one of the pointers, something was not properly cleaned up previously.
-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 _______________________________________________ Mailing list: https://launchpad.net/~drizzle-discuss Post to : [email protected] Unsubscribe : https://launchpad.net/~drizzle-discuss More help : https://help.launchpad.net/ListHelp

