Fix for bug #300477 to stabilize the table freeing changes. This fixes

the crash that occurred when you aborted the loading of the Netscape home
page.
This commit is contained in:
nisheeth%netscape.com 1998-07-16 08:42:43 +00:00
Родитель 5c5498ff39
Коммит 43e47de554
4 изменённых файлов: 14 добавлений и 9 удалений

Просмотреть файл

@ -340,7 +340,7 @@ lo_ClipLines(MWContext *context, lo_DocState *state, int32 line)
}
while ((start_clipping != NULL)&&(start_clipping != end_clipping))
{
lo_ScrapeElement(context, start_clipping);
lo_ScrapeElement(context, start_clipping, TRUE);
start_clipping = start_clipping->lo_any.next;
}
@ -447,7 +447,7 @@ lo_ClipLines(MWContext *context, lo_DocState *state, int32 line)
*/
if ((eptr->lo_any.y - dy) < 0)
{
lo_ScrapeElement(context, eptr);
lo_ScrapeElement(context, eptr, TRUE);
eptr = eptr->lo_any.next;
continue;
}

Просмотреть файл

@ -457,8 +457,12 @@ lo_remove_image(lo_DocLists *doc_lists, LO_Element *element)
}
/* freeTableOrCellState should should be set to TRUE to free the
associated lo_TableRec for the LO_TABLE layout element or the
lo_TableCell for an LO_CELL layout element */
void
lo_ScrapeElement(MWContext *context, LO_Element *element)
lo_ScrapeElement(MWContext *context, LO_Element *element, Bool freeTableOrCellState )
{
if (element == NULL)
{
@ -736,7 +740,7 @@ lo_ScrapeElement(MWContext *context, LO_Element *element)
}
/* Free the lo_TableCell record associated with this cell */
if ( element->lo_cell.table_cell != NULL )
if ( freeTableOrCellState && element->lo_cell.table_cell != NULL )
{
lo_TopState *top_state;
lo_DocState *state;
@ -752,7 +756,8 @@ lo_ScrapeElement(MWContext *context, LO_Element *element)
case LO_TABLE:
{
lo_ScrapeTableElement( context, (LO_TableStruct *) element );
if (freeTableOrCellState)
lo_ScrapeTableElement( context, (LO_TableStruct *) element );
}
break;
@ -813,7 +818,7 @@ lo_FreeElement(MWContext *context, LO_Element *element, Bool do_scrape)
if (do_scrape != FALSE)
{
lo_ScrapeElement(context, element);
lo_ScrapeElement(context, element, FALSE);
}
#ifdef MEMORY_ARENAS

Просмотреть файл

@ -994,7 +994,7 @@ extern void lo_FreePartialCell(MWContext *context, lo_DocState *state,
extern void lo_FreeElement(MWContext *context, LO_Element *, Bool);
extern void lo_FreeElementList(MWContext *, LO_Element *);
extern void lo_FreeImageAttributes(LO_ImageAttr *image_attr);
extern void lo_ScrapeElement(MWContext *context, LO_Element *);
extern void lo_ScrapeElement(MWContext *context, LO_Element *, Bool);
extern int32 lo_FreeRecycleList(MWContext *context, LO_Element *);
extern void lo_FreeGridRec(lo_GridRec *);
extern void lo_FreeGridCellRec(MWContext *, lo_GridRec *, lo_GridCellRec *);

Просмотреть файл

@ -1941,10 +1941,10 @@ lo_RecycleElements(MWContext *context, lo_DocState *state, LO_Element *elements)
eptr = elements;
while(eptr->lo_any.next != NULL)
{
lo_ScrapeElement(context, eptr);
lo_ScrapeElement(context, eptr, TRUE);
eptr = eptr->lo_any.next;
}
lo_ScrapeElement(context, eptr);
lo_ScrapeElement(context, eptr, TRUE);
#ifdef MEMORY_ARENAS
if ( EDT_IS_EDITOR(context) ) {
eptr->lo_any.next = state->top_state->recycle_list;