From 9489b23985ccaaa808965f74eb32d731addaf1ed Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 13 Feb 2025 08:11:16 +0000 Subject: [PATCH] freeMagic1() idiom insertion at all sites reported by static code analysis --- calma/CalmaRdpt.c | 4 +++- calma/CalmaWrite.c | 33 ++++++++++++++++++++--------- calma/CalmaWriteZ.c | 33 ++++++++++++++++++++--------- cif/CIFgen.c | 8 ++++++-- cif/CIFrdcl.c | 6 ++++-- cif/CIFrdpt.c | 16 +++++++++++---- cif/CIFrdtech.c | 8 ++++++-- cif/CIFrdutils.c | 4 +++- cif/CIFtech.c | 8 ++++++-- commands/CmdAB.c | 12 +++++++---- commands/CmdCD.c | 48 +++++++++++++++++++++++++++++++------------ commands/CmdFI.c | 4 +++- commands/CmdRS.c | 4 +++- commands/CmdTZ.c | 8 +++++--- database/DBcellname.c | 8 ++++++-- database/DBcellsrch.c | 17 ++++++++++----- database/DBcellsubr.c | 4 +++- database/DBio.c | 16 +++++++++++---- database/DBlabel.c | 20 +++++++++++++----- database/DBpaint.c | 4 +++- database/DBtechtype.c | 8 ++++++-- database/DBtimestmp.c | 8 ++++++-- dbwind/DBWelement.c | 16 +++++++++++---- drc/DRCcontin.c | 4 +++- drc/DRCtech.c | 12 ++++++++--- ext2sim/ext2sim.c | 4 +++- ext2spice/ext2hier.c | 8 ++++++-- ext2spice/ext2spice.c | 12 ++++++++--- extflat/EFbuild.c | 20 +++++++++++++----- extflat/EFdef.c | 8 ++++++-- extflat/EFname.c | 4 +++- extract/ExtBasic.c | 26 ++++++++++++++++++----- extract/ExtHard.c | 14 +++++++++---- extract/ExtLength.c | 26 +++++++++++++++-------- extract/ExtMain.c | 46 ++++++++++++++++++++++++++++++----------- extract/ExtRegion.c | 20 +++++++++++++----- extract/ExtTech.c | 16 +++++++++++---- extract/ExtYank.c | 4 +++- gcr/gcrChannel.c | 4 +++- gcr/gcrRoute.c | 4 +++- graphics/W3Dmain.c | 4 +++- graphics/grClip.c | 4 +++- graphics/grDStyle.c | 4 +++- grouter/grouteChan.c | 4 +++- grouter/grouteMain.c | 4 +++- grouter/groutePath.c | 4 +++- grouter/groutePen.c | 8 ++++++-- grouter/grouteTest.c | 4 +++- lef/defRead.c | 12 ++++++++--- lef/defWrite.c | 4 +++- lef/lefCmd.c | 4 +++- lef/lefRead.c | 12 ++++++++--- lef/lefWrite.c | 4 +++- mzrouter/mzEstimate.c | 4 +++- mzrouter/mzTech.c | 26 +++++++++++++++-------- netmenu/NMcmdAK.c | 12 ++++++++--- netmenu/NMnetlist.c | 4 +++- netmenu/NMwiring.c | 8 ++++++-- plot/plotPS.c | 30 +++++++++++++++++++-------- plot/plotVers.c | 8 ++++++-- plow/PlowMain.c | 4 +++- plow/PlowTech.c | 20 +++++++++++++----- resis/ResBasic.c | 4 +++- resis/ResRex.c | 4 +++- router/rtrStem.c | 4 +++- router/rtrVia.c | 48 +++++++++++++++++++++++++++++-------------- select/selEnum.c | 4 +++- select/selOps.c | 4 +++- utils/hash.c | 10 +++++++-- utils/list.c | 10 ++++++--- utils/netlist.c | 8 +++++--- utils/pathvisit.c | 4 +++- utils/tech.c | 4 +++- utils/undo.c | 26 ++++++++++++++++------- wiring/wireTech.c | 4 +++- 75 files changed, 621 insertions(+), 230 deletions(-) diff --git a/calma/CalmaRdpt.c b/calma/CalmaRdpt.c index b20049e9..4d58ede2 100644 --- a/calma/CalmaRdpt.c +++ b/calma/CalmaRdpt.c @@ -360,12 +360,14 @@ calmaElementBoundary(void) } /* Paint the rectangles (if any) */ + free_magic1_t mm1 = freeMagic1_init(); for (; rp != NULL ; rp = rp->r_next) { if (plane) DBPaintPlane(plane, &rp->r_r, CIFPaintTable, (PaintUndoInfo *)NULL); - freeMagic((char *) rp); + freeMagic1(&mm1, (char *) rp); } + freeMagic1_end(&mm1); if (cifCurReadPlanes == cifEditCellPlanes) { diff --git a/calma/CalmaWrite.c b/calma/CalmaWrite.c index 67c28cec..9009e1fd 100644 --- a/calma/CalmaWrite.c +++ b/calma/CalmaWrite.c @@ -1400,8 +1400,10 @@ calmaOutFunc( { pllist[i].pl_label = ll->ll_label; pllist[i].pl_port = (unsigned int)ll->ll_attr; - freeMagic(ll); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, ll); ll = ll->ll_next; + freeMagic1_end(&mm1); i++; } @@ -2422,19 +2424,26 @@ calmaProcessBoundary( /* Free the LinkedBoundary list */ - lbref = listtop; - while (lbref->lb_next != listtop) { - freeMagic(lbref); - lbref = lbref->lb_next; + free_magic1_t mm1 = freeMagic1_init(); + lbref = listtop; + while (lbref->lb_next != listtop) + { + freeMagic1(&mm1, lbref); + lbref = lbref->lb_next; + } + freeMagic1_end(&mm1); } - freeMagic(lbref); } /* Free the BoundaryTop list */ - for (bounds = blist; bounds != NULL; bounds = bounds->bt_next) - freeMagic(bounds); + { + free_magic1_t mm1 = freeMagic1_init(); + for (bounds = blist; bounds != NULL; bounds = bounds->bt_next) + freeMagic1(&mm1, bounds); + freeMagic1_end(&mm1); + } } /* @@ -2500,8 +2509,10 @@ calmaMergePaintFunc( lb = edge; while (lb->lb_next != edge) lb = lb->lb_next; lb->lb_next = edge->lb_next; - freeMagic(edge); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, edge); edge = edge->lb_next; + freeMagic1_end(&mm1); } } else @@ -2720,11 +2731,13 @@ done_searches: if (num_points != 4) { + free_magic1_t mm1 = freeMagic1_init(); for (i = 0; i < num_points; i++) { - freeMagic(edge); + freeMagic1(&mm1, edge); edge = edge->lb_next; } + freeMagic1_end(&mm1); edge = NULL; } if (!StackEmpty(SegStack)) diff --git a/calma/CalmaWriteZ.c b/calma/CalmaWriteZ.c index bb58ec53..11221e67 100644 --- a/calma/CalmaWriteZ.c +++ b/calma/CalmaWriteZ.c @@ -1324,8 +1324,10 @@ calmaOutFuncZ( { pllist[i].pl_label = ll->ll_label; pllist[i].pl_port = (unsigned int)ll->ll_attr; - freeMagic(ll); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, ll); ll = ll->ll_next; + freeMagic1_end(&mm1); i++; } @@ -1857,19 +1859,26 @@ calmaProcessBoundaryZ( /* Free the LinkedBoundary list */ - lbref = listtop; - while (lbref->lb_next != listtop) { - freeMagic(lbref); - lbref = lbref->lb_next; + free_magic1_t mm1 = freeMagic1_init(); + lbref = listtop; + while (lbref->lb_next != listtop) + { + freeMagic1(&mm1, lbref); + lbref = lbref->lb_next; + } + freeMagic1_end(&mm1); } - freeMagic(lbref); } /* Free the BoundaryTop list */ - for (bounds = blist; bounds != NULL; bounds = bounds->bt_next) - freeMagic(bounds); + { + free_magic1_t mm1 = freeMagic1_init(); + for (bounds = blist; bounds != NULL; bounds = bounds->bt_next) + freeMagic1(&mm1, bounds); + freeMagic1_end(&mm1); + } } /* @@ -1935,8 +1944,10 @@ calmaMergePaintFuncZ( lb = edge; while (lb->lb_next != edge) lb = lb->lb_next; lb->lb_next = edge->lb_next; - freeMagic(edge); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, edge); edge = edge->lb_next; + freeMagic1_end(&mm1); } } else @@ -2155,11 +2166,13 @@ done_searches: if (num_points != 4) { + free_magic1_t mm1 = freeMagic1_init(); for (i = 0; i < num_points; i++) { - freeMagic(edge); + freeMagic1(&mm1, edge); edge = edge->lb_next; } + freeMagic1_end(&mm1); edge = NULL; } if (!StackEmpty(SegStack)) diff --git a/cif/CIFgen.c b/cif/CIFgen.c index 807a4816..0d74098f 100644 --- a/cif/CIFgen.c +++ b/cif/CIFgen.c @@ -2783,8 +2783,10 @@ cifSquaresFillArea( DBPaintPlane(plane, &stripList->area, CIFEraseTable, (PaintUndoInfo *) NULL); - freeMagic(stripList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, stripList); stripList = stripList->strip_next; + freeMagic1_end(&mm1); } /* 2nd pass: Search the plane for unmarked tiles */ @@ -3125,8 +3127,10 @@ cifSlotsFillArea( DBPaintPlane(plane, &stripList->area, CIFEraseTable, (PaintUndoInfo *) NULL); - freeMagic(stripList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, stripList); stripList = stripList->strip_next; + freeMagic1_end(&mm1); } /* 2nd pass: Search the plane for unmarked tiles */ diff --git a/cif/CIFrdcl.c b/cif/CIFrdcl.c index 01620602..867d5ba4 100644 --- a/cif/CIFrdcl.c +++ b/cif/CIFrdcl.c @@ -851,9 +851,11 @@ CIFPaintCurrent( freeMagic(propstr); } propstr = newstr; - freeMagic(lrec); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, lrec); lrec = lrec->r_next; - } + freeMagic1_end(&mm1); + } /* NOTE: propstr is transferred to the CellDef and should * not be free'd here. */ diff --git a/cif/CIFrdpt.c b/cif/CIFrdpt.c index 91c942f4..35adc0b0 100644 --- a/cif/CIFrdpt.c +++ b/cif/CIFrdpt.c @@ -338,18 +338,20 @@ CIFPaintWirePath( pathp = pathheadp->cifp_next; if (pathp != NULL) { + free_magic1_t mm1 = freeMagic1_init(); while (pathp->cifp_next != NULL) { if (pathp->cifp_next->cifp_x == pathp->cifp_x && pathp->cifp_next->cifp_y == pathp->cifp_y) { previousp->cifp_next = pathp->cifp_next; - freeMagic(pathp); + freeMagic1(&mm1, pathp); } else previousp = pathp; pathp = pathp->cifp_next; } + freeMagic1_end(&mm1); } previousp = pathheadp; @@ -486,11 +488,13 @@ CIFPaintWirePath( rectp = CIFPolyToRects(polypath, plane, ptable, ui, FALSE); CIFFreePath(polypath); + free_magic1_t mm1 = freeMagic1_init(); for (; rectp != NULL ; rectp = rectp->r_next) { DBPaintPlane(plane, &rectp->r_r, ptable, ui); - freeMagic((char *) rectp); + freeMagic1(&mm1, (char *) rectp); } + freeMagic1_end(&mm1); polypath = NULL; } else @@ -588,11 +592,13 @@ PaintPolygon( rectlist = CIFPolyToRects(cifpath, plane, ptable, ui, FALSE); CIFFreePath(cifpath); + free_magic1_t mm1 = freeMagic1_init(); for (rectp = rectlist; rectp != NULL ; rectp = rectp->r_next) { DBPaintPlane(plane, &rectp->r_r, ptable, ui); - if (!keep) freeMagic((char *) rectp); + if (!keep) freeMagic1(&mm1, (char *) rectp); } + freeMagic1_end(&mm1); return (keep) ? rectlist : (LinkedRect *)NULL; } @@ -821,11 +827,13 @@ CIFParsePoly(void) CIFSkipToSemi(); return FALSE; } + free_magic1_t mm1 = freeMagic1_init(); for (; rectp != NULL ; rectp = rectp->r_next) { DBPaintPlane(cifReadPlane, &rectp->r_r, CIFPaintTable, (PaintUndoInfo *) NULL); - freeMagic((char *) rectp); + freeMagic1(&mm1, (char *) rectp); } + freeMagic1_end(&mm1); return TRUE; } diff --git a/cif/CIFrdtech.c b/cif/CIFrdtech.c index 1106670d..abfe42b2 100644 --- a/cif/CIFrdtech.c +++ b/cif/CIFrdtech.c @@ -329,8 +329,10 @@ cifNewReadStyle(void) layer = cifCurReadStyle->crs_layers[i]; if (layer != NULL) { + free_magic1_t mm1 = freeMagic1_init(); for (op = layer->crl_ops; op != NULL; op = op->co_next) - freeMagic((char *)op); + freeMagic1(&mm1, (char *)op); + freeMagic1_end(&mm1); freeMagic((char *)layer); } } @@ -408,11 +410,13 @@ CIFReadTechInit(void) /* forget the list of styles */ + free_magic1_t mm1 = freeMagic1_init(); for (style = cifReadStyleList; style != NULL; style = style->crs_next) { freeMagic(style->crs_name); - freeMagic(style); + freeMagic1(&mm1, style); } + freeMagic1_end(&mm1); cifReadStyleList = NULL; } diff --git a/cif/CIFrdutils.c b/cif/CIFrdutils.c index 71950bad..3b082d36 100644 --- a/cif/CIFrdutils.c +++ b/cif/CIFrdutils.c @@ -1338,11 +1338,13 @@ void CIFFreePath( CIFPath *path) /* Path to be freed. */ { + free_magic1_t mm1 = freeMagic1_init(); while (path != NULL) { - freeMagic((char *) path); + freeMagic1(&mm1, (char *) path); path = path->cifp_next; } + freeMagic1_end(&mm1); } /* diff --git a/cif/CIFtech.c b/cif/CIFtech.c index c07e48ff..15f2e2d5 100644 --- a/cif/CIFtech.c +++ b/cif/CIFtech.c @@ -100,6 +100,7 @@ cifTechFreeStyle(void) layer = CIFCurStyle->cs_layers[i]; if (layer != NULL) { + free_magic1_t mm1 = freeMagic1_init(); for (op = layer->cl_ops; op != NULL; op = op->co_next) { if (op->co_client != (ClientData)NULL) @@ -120,8 +121,9 @@ cifTechFreeStyle(void) break; } } - freeMagic((char *)op); + freeMagic1(&mm1, (char *)op); } + freeMagic1_end(&mm1); freeMagic((char *)layer); } } @@ -388,11 +390,13 @@ CIFTechInit(void) /* forget the list of styles */ + free_magic1_t mm1 = freeMagic1_init(); for (style = CIFStyleList; style != NULL; style = style->cs_next) { freeMagic(style->cs_name); - freeMagic(style); + freeMagic1(&mm1, style); } + freeMagic1_end(&mm1); CIFStyleList = NULL; } diff --git a/commands/CmdAB.c b/commands/CmdAB.c index 7470a5a8..ea3a57f9 100644 --- a/commands/CmdAB.c +++ b/commands/CmdAB.c @@ -530,11 +530,15 @@ badusage: } freelist: - la = lahead; - while (la != NULL) { - freeMagic((char *)la); - la = la->ar_next; + la = lahead; + while (la != NULL) + { + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *)la); + la = la->ar_next; + freeMagic1_end(&mm1); + } } return; } diff --git a/commands/CmdCD.c b/commands/CmdCD.c index 35293b3f..05839a0a 100644 --- a/commands/CmdCD.c +++ b/commands/CmdCD.c @@ -2455,6 +2455,7 @@ CmdContact( rmask = DBResidueMask(type); + free_magic1_t mm1 = freeMagic1_init(); while (lr != NULL) { GeoClip(&lr->r_r, &area); @@ -2465,9 +2466,10 @@ CmdContact( if (TTMaskHasType(rmask, rtype)) DBPaint(EditCellUse->cu_def, &lr->r_r, rtype); - freeMagic(lr); + freeMagic1(&mm1, lr); lr = lr->r_next; } + freeMagic1_end(&mm1); /* Refresh the layout drawing */ DBWAreaChanged(EditCellUse->cu_def, &area, DBW_ALLWINDOWS, &smask); @@ -2504,14 +2506,16 @@ CmdContact( DBSrPaintArea((Tile *) NULL, EditCellUse->cu_def->cd_planes[DBPlane(rtype)], &area, &smask, cmdContactFunc, (ClientData) &ccs); + free_magic1_t mm1 = freeMagic1_init(); while (ccs.lhead != NULL) { TTMaskSetOnlyType(&smask, type); TTMaskAndMask(&smask, &DBActiveLayerBits); DBPaintMask(EditCellUse->cu_def, &ccs.lhead->r_r, &smask); - freeMagic(ccs.lhead); + freeMagic1(&mm1, ccs.lhead); ccs.lhead = ccs.lhead->r_next; } + freeMagic1_end(&mm1); /* Refresh the layout drawing */ DBWAreaChanged(EditCellUse->cu_def, &area, DBW_ALLWINDOWS, &smask); @@ -2952,14 +2956,22 @@ CmdCorner( rectp = CIFPolyToRects(cmdPathList.pathlist->pathhead, plane, resultTbl, &ui, FALSE); - for (; rectp != NULL; rectp = rectp->r_next) { - DBPaintPlane(plane, &rectp->r_r, resultTbl, &ui); - freeMagic((char *)rectp); + free_magic1_t mm1 = freeMagic1_init(); + for (; rectp != NULL; rectp = rectp->r_next) + { + DBPaintPlane(plane, &rectp->r_r, resultTbl, &ui); + freeMagic1(&mm1, (char *)rectp); + } + freeMagic1_end(&mm1); } CIFFreePath(cmdPathList.pathlist->pathhead); - freeMagic((char *)cmdPathList.pathlist); - cmdPathList.pathlist = cmdPathList.pathlist->cpl_next; + { + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *)cmdPathList.pathlist); + cmdPathList.pathlist = cmdPathList.pathlist->cpl_next; + freeMagic1_end(&mm1); + } } } else @@ -2977,14 +2989,16 @@ CmdCorner( /* Now that we've got all the material, scan over the list * painting the material and freeing up the entries on the list. */ + free_magic1_t mm1 = freeMagic1_init(); while (cmdCornerList != NULL) { DBPaint(EditCellUse->cu_def, &cmdCornerList->cca_area, cmdCornerList->cca_type); - freeMagic((char *) cmdCornerList); + freeMagic1(&mm1, (char *) cmdCornerList); cmdCornerList = cmdCornerList->cca_next; } - } + freeMagic1_end(&mm1); +} SelectClear(); DBAdjustLabels(EditCellUse->cu_def, &editBox); @@ -3643,8 +3657,10 @@ cmdBevelFunc( GeoClip(&r3, &cmdCornerRootBox); if (GEO_RECTNULL(&r2) || GEO_RECTNULL(&r3)) { + free_magic1_t mm1 = freeMagic1_init(); for (pptr = pathhead; pptr != NULL; pptr = pptr->cifp_next) - freeMagic((char *)pptr); + freeMagic1(&mm1, (char *)pptr); + freeMagic1_end(&mm1); return 0; } @@ -4154,6 +4170,7 @@ CmdDrc( rootUse = (CellUse *) window->w_surfaceID; dcl = DRCCount(rootUse, &rootArea, doforall); + free_magic1_t mm1 = freeMagic1_init(); while (dcl != NULL) { if (count_total >= 0) @@ -4183,9 +4200,10 @@ CmdDrc( } #endif } - freeMagic((char *)dcl); + freeMagic1(&mm1, (char *)dcl); dcl = dcl->dcl_next; } + freeMagic1_end(&mm1); #ifdef MAGIC_WRAPPER if ((count_total >= 0) || (!dolist)) @@ -4336,12 +4354,14 @@ CmdDrc( } if (findonly) { + free_magic1_t mm1 = freeMagic1_init(); /* Delete temporary rules */ while (DRCIgnoreRules != NULL) { - freeMagic(DRCIgnoreRules); + freeMagic1(&mm1, DRCIgnoreRules); DRCIgnoreRules = DRCIgnoreRules->li_next; } + freeMagic1_end(&mm1); /* Replace temporary set of rules */ DRCIgnoreRules = DRCSaveRules; } @@ -4424,8 +4444,10 @@ CmdDrc( { while (DRCIgnoreRules != NULL) { - freeMagic(DRCIgnoreRules); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, DRCIgnoreRules); DRCIgnoreRules = DRCIgnoreRules->li_next; + freeMagic1_end(&mm1); } } else diff --git a/commands/CmdFI.c b/commands/CmdFI.c index b48a54ba..93a5aebd 100644 --- a/commands/CmdFI.c +++ b/commands/CmdFI.c @@ -581,13 +581,15 @@ CmdFill( /* Now that we've got all the material, scan over the list * painting the material and freeing up the entries on the list. */ + free_magic1_t mm1 = freeMagic1_init(); while (cmdFillList != NULL) { DBPaint(EditCellUse->cu_def, &cmdFillList->cfa_area, cmdFillList->cfa_type); - freeMagic((char *) cmdFillList); + freeMagic1(&mm1, (char *) cmdFillList); cmdFillList = cmdFillList->cfa_next; } + freeMagic1_end(&mm1); SelectClear(); DBAdjustLabels(EditCellUse->cu_def, &editBox); diff --git a/commands/CmdRS.c b/commands/CmdRS.c index e6dd8360..8bb419f3 100644 --- a/commands/CmdRS.c +++ b/commands/CmdRS.c @@ -1256,15 +1256,17 @@ CmdSelect( /* of rlist) */ SelectClear(); + free_magic1_t mm1 = freeMagic1_init(); while (rlist != NULL) { /* Paint rlist back into SelectDef */ DBPaint(SelectDef, &rlist->r_r, rlist->r_type); /* cleanup as we go */ - freeMagic(rlist); + freeMagic1(&mm1, rlist); rlist = rlist->r_next; } + freeMagic1_end(&mm1); /* Force erase and redraw of the selection */ DBReComputeBbox(SelectDef); diff --git a/commands/CmdTZ.c b/commands/CmdTZ.c index 9663432a..23206ca6 100644 --- a/commands/CmdTZ.c +++ b/commands/CmdTZ.c @@ -1103,11 +1103,13 @@ CmdWhat( } #endif - while (lid != NULL) - { - freeMagic(lid); + free_magic1_t mm1 = freeMagic1_init(); + while (lid != NULL) + { + freeMagic1(&mm1, lid); lid = lid->lid_next; } + freeMagic1_end(&mm1); #ifdef MAGIC_WRAPPER if (doListAll) Tcl_ListObjAppendElement(magicinterp, paintobj, diff --git a/database/DBcellname.c b/database/DBcellname.c index 1d3d478c..9d23dfe9 100644 --- a/database/DBcellname.c +++ b/database/DBcellname.c @@ -320,6 +320,7 @@ DBCellDelete(cellname, force) /* use. If so, load the window with (UNNAMED). */ UndoDisable(); + free_magic1_t mm1 = freeMagic1_init(); for (celluse = celldef->cd_parents; celluse != (CellUse *) NULL; celluse = celluse->cu_nextuse) { @@ -328,8 +329,9 @@ DBCellDelete(cellname, force) WindUnload(celluse); freeMagic(celluse->cu_id); } - freeMagic((char *)celluse); + freeMagic1(&mm1, (char *)celluse); } + freeMagic1_end(&mm1); celldef->cd_parents = (CellUse *)NULL; DBWResetBox(celldef); @@ -2006,8 +2008,10 @@ DBCellDefFree(cellDef) cellDef->cd_planes[pNum] = (Plane *) NULL; } + free_magic1_t mm1 = freeMagic1_init(); for (lab = cellDef->cd_labels; lab; lab = lab->lab_next) - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); + freeMagic1_end(&mm1); SigEnableInterrupts(); HashKill(&cellDef->cd_idHash); diff --git a/database/DBcellsrch.c b/database/DBcellsrch.c index 84da70af..db15c6d6 100644 --- a/database/DBcellsrch.c +++ b/database/DBcellsrch.c @@ -1516,13 +1516,14 @@ DBScaleEverything(scalen, scaled) } /* Free the linked CellDef list */ - + free_magic1_t mm1 = freeMagic1_init(); lcd = lhead; while (lcd != NULL) { - freeMagic((char *)lcd); + freeMagic1(&mm1, (char *)lcd); lcd = lcd->cd_next; } + freeMagic1_end(&mm1); /* Scale all elements */ DBWScaleElements(scalen, scaled); @@ -1769,12 +1770,14 @@ DBSrCellUses(cellDef, func, arg) } /* Free this linked cellUse structure */ + free_magic1_t mm1 = freeMagic1_init(); lu = luhead; while (lu != NULL) { - freeMagic((char *)lu); + freeMagic1(&mm1, (char *)lu); lu = lu->cu_next; } + freeMagic1_end(&mm1); return retval; } @@ -2002,12 +2005,14 @@ dbScaleCell(cellDef, scalen, scaled) BPFree(cellPlaneOrig); /* Free this linked cellUse structure */ + free_magic1_t mm1 = freeMagic1_init(); lu = luhead; while (lu != NULL) { - freeMagic((char *)lu); + freeMagic1(&mm1, (char *)lu); lu = lu->cu_next; } + freeMagic1_end(&mm1); /* Scale all of the paint tiles in this cell by creating a new plane */ /* and copying all tiles into the new plane at scaled dimensions. */ @@ -2210,12 +2215,14 @@ DBMoveCell(cellDef, origx, origy) BPFree(cellPlaneOrig); /* Free this linked cellUse structure */ + free_magic1_t mm1 = freeMagic1_init(); lu = luhead; while (lu != NULL) { - freeMagic((char *)lu); + freeMagic1(&mm1, (char *)lu); lu = lu->cu_next; } + freeMagic1_end(&mm1); /* Move all of the paint tiles in this cell by creating a new plane */ /* and copying all tiles into the new plane at the new position. */ diff --git a/database/DBcellsubr.c b/database/DBcellsubr.c index 48f109ec..3b60a00a 100644 --- a/database/DBcellsubr.c +++ b/database/DBcellsubr.c @@ -218,8 +218,10 @@ DBCellClearDef(cellDef) cellDef->cd_bbox.r_xtop = cellDef->cd_bbox.r_ytop = 1; cellDef->cd_extended.r_xbot = cellDef->cd_extended.r_ybot = 0; cellDef->cd_extended.r_xtop = cellDef->cd_extended.r_ytop = 1; + free_magic1_t mm1 = freeMagic1_init(); for (lab = cellDef->cd_labels; lab; lab = lab->lab_next) - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); + freeMagic1_end(&mm1); cellDef->cd_labels = (Label *) NULL; cellDef->cd_lastLabel = (Label *) NULL; diff --git a/database/DBio.c b/database/DBio.c index a31ee7cf..e4396a53 100644 --- a/database/DBio.c +++ b/database/DBio.c @@ -283,8 +283,10 @@ DBSearchForTech(techname, techroot, pathroot, level) if (!strcmp(tdent->d_name, techname)) { closedir(tdir); + free_magic1_t mm1 = freeMagic1_init(); for (ld = dlist; ld; ld = ld->ld_next) - freeMagic(ld); + freeMagic1(&mm1, ld); + freeMagic1_end(&mm1); return pathroot; } } @@ -297,8 +299,10 @@ DBSearchForTech(techname, techroot, pathroot, level) if (found) { closedir(tdir); + free_magic1_t mm1 = freeMagic1_init(); for (ld = dlist; ld; ld = ld->ld_next) - freeMagic(ld); + freeMagic1(&mm1, ld); + freeMagic1_end(&mm1); return found; } } @@ -306,8 +310,12 @@ DBSearchForTech(techname, techroot, pathroot, level) closedir(tdir); } - for (ld = dlist; ld; ld = ld->ld_next) - freeMagic(ld); + { + free_magic1_t mm1 = freeMagic1_init(); + for (ld = dlist; ld; ld = ld->ld_next) + freeMagic1(&mm1, ld); + freeMagic1_end(&mm1); + } return NULL; } diff --git a/database/DBlabel.c b/database/DBlabel.c index 1766496d..d6c89d30 100644 --- a/database/DBlabel.c +++ b/database/DBlabel.c @@ -280,6 +280,7 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch) bool erasedAny = FALSE; TileType newType; + free_magic1_t mm1 = freeMagic1_init(); labPrev = NULL; lab = cellDef->cd_labels; while (lab != NULL) @@ -313,7 +314,7 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch) if ((lab->lab_font >= 0) && areaReturn) GeoInclude(&lab->lab_bbox, areaReturn); - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); lab = lab->lab_next; erasedAny = TRUE; continue; @@ -321,6 +322,7 @@ DBEraseGlobLabel(cellDef, area, mask, areaReturn, globmatch) nextLab: labPrev = lab; lab = lab->lab_next; } + freeMagic1_end(&mm1); if (erasedAny) cellDef->cd_flags |= CDMODIFIED|CDGETNEWSTAMP; @@ -442,6 +444,7 @@ DBEraseLabelsByContent(def, rect, type, text) { Label *lab, *labPrev; + free_magic1_t mm1 = freeMagic1_init(); for (labPrev = NULL, lab = def->cd_labels; lab != NULL; labPrev = lab, lab = lab->lab_next) @@ -457,7 +460,7 @@ DBEraseLabelsByContent(def, rect, type, text) else labPrev->lab_next = lab->lab_next; if (def->cd_lastLabel == lab) def->cd_lastLabel = labPrev; - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); /* Don't iterate through loop, since this will skip a label: * just go back to top. This is tricky! @@ -467,6 +470,7 @@ DBEraseLabelsByContent(def, rect, type, text) if (lab == NULL) break; else goto nextCheck; } + freeMagic1_end(&mm1); } /* @@ -495,6 +499,7 @@ DBRemoveLabel(def, refLab) { Label *lab, *labPrev; + free_magic1_t mm1 = freeMagic1_init(); for (labPrev = NULL, lab = def->cd_labels; lab != NULL; labPrev = lab, lab = lab->lab_next) @@ -508,7 +513,7 @@ DBRemoveLabel(def, refLab) else labPrev->lab_next = lab->lab_next; if (def->cd_lastLabel == lab) def->cd_lastLabel = labPrev; - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); /* Don't iterate through loop, since this will skip a label: * just go back to top. This is tricky! @@ -518,6 +523,7 @@ DBRemoveLabel(def, refLab) if (lab == NULL) break; else goto nextCheck; } + freeMagic1_end(&mm1); } /* @@ -760,8 +766,10 @@ DBAdjustLabelsNew(def, area) def->cd_lastLabel = labPrev; DBUndoEraseLabel(def, lab); DBWLabelChanged(def, lab, DBW_ALLWINDOWS); - freeMagic((char *) lab); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *) lab); lab = lab->lab_next; + freeMagic1_end(&mm1); modified = TRUE; continue; } @@ -1744,8 +1752,10 @@ DBLoadFont(fontfile, scale) } /* Remove the pointlist */ + free_magic1_t mm1 = freeMagic1_init(); for (newPath = pathStart; newPath != NULL; newPath = newPath->fp_next) - freeMagic(newPath); + freeMagic1(&mm1, newPath); + freeMagic1_end(&mm1); pathStart = NULL; } else diff --git a/database/DBpaint.c b/database/DBpaint.c index 0f90c1c6..cee0068d 100644 --- a/database/DBpaint.c +++ b/database/DBpaint.c @@ -1796,12 +1796,14 @@ nextrect: lr = lr->r_next; } + free_magic1_t mm1 = freeMagic1_init(); lr = lhead; while (lr != NULL) { - freeMagic((char *) lr); + freeMagic1(&mm1, (char *) lr); lr = lr->r_next; } + freeMagic1_end(&mm1); } else result = DBPaintPlane0(plane, area, resultTbl, undo, (method == PAINT_MARK) ? diff --git a/database/DBtechtype.c b/database/DBtechtype.c index 8db59f77..411d5d55 100644 --- a/database/DBtechtype.c +++ b/database/DBtechtype.c @@ -126,12 +126,14 @@ DBTechInitPlane(void) { NameList *tbl; + free_magic1_t mm1 = freeMagic1_init(); for (tbl = dbPlaneNameLists.sn_next; tbl != &dbPlaneNameLists; tbl = tbl->sn_next) { freeMagic(tbl->sn_name); - freeMagic(tbl); + freeMagic1(&mm1, tbl); } + freeMagic1_end(&mm1); } /* Tables of short names */ @@ -205,12 +207,14 @@ DBTechInitType() { NameList *tbl; + free_magic1_t mm1 = freeMagic1_init(); for (tbl = dbTypeNameLists.sn_next; tbl != &dbTypeNameLists; tbl = tbl->sn_next) { freeMagic(tbl->sn_name); - freeMagic(tbl); + freeMagic1(&mm1, tbl); } + freeMagic1_end(&mm1); } /* Tables of short names */ diff --git a/database/DBtimestmp.c b/database/DBtimestmp.c index c6e44d70..85850359 100644 --- a/database/DBtimestmp.c +++ b/database/DBtimestmp.c @@ -137,8 +137,10 @@ DBFixMismatch() cellDef = mismatch->mm_cellDef; oldArea = mismatch->mm_oldArea; - freeMagic((char *) mismatch); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *) mismatch); mismatch = mismatch->mm_next; + freeMagic1_end(&mm1); if (cellDef->cd_flags & CDPROCESSED) continue; (void) DBCellRead(cellDef, TRUE, TRUE, NULL); @@ -182,13 +184,15 @@ DBFixMismatch() } SigEnableInterrupts(); TxPrintf("Timestamp mismatches found in these cells: "); + free_magic1_t mm1 = freeMagic1_init(); while (cl != NULL) { TxPrintf("%s", cl->cl_cell->cd_name); if (cl->cl_next != NULL) TxPrintf(", "); - freeMagic(cl); + freeMagic1(&mm1, cl); cl = cl->cl_next; } + freeMagic1_end(&mm1); TxPrintf(".\n"); TxFlush(); if (redisplay) WindAreaChanged((MagWindow *) NULL, (Rect *) NULL); diff --git a/dbwind/DBWelement.c b/dbwind/DBWelement.c index 3f2ee651..7d8ea59a 100644 --- a/dbwind/DBWelement.c +++ b/dbwind/DBWelement.c @@ -588,10 +588,12 @@ DBWElementDelete(MagWindow *w, char *name) if (elem->flags & DBW_ELEMENT_PERSISTENT) elem->rootDef->cd_flags |= CDMODIFIED; + free_magic1_t mm1 = freeMagic1_init(); for (stylePtr = elem->stylelist; stylePtr != NULL; stylePtr = stylePtr->next) { - freeMagic(stylePtr); + freeMagic1(&mm1, stylePtr); } + freeMagic1_end(&mm1); if (elem->type == ELEMENT_TEXT) freeMagic(elem->text); @@ -1156,8 +1158,10 @@ DBWElementStyle(MagWindow *w, char *ename, int style, bool add) (elem->stylelist->style == style)) { dbwElementUndraw(w, elem); - freeMagic(elem->stylelist); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, elem->stylelist); elem->stylelist = elem->stylelist->next; + freeMagic1_end(&mm1); if (elem->stylelist == NULL) TxPrintf("Warning: Element %s has no styles!\n", ename); } @@ -1169,8 +1173,10 @@ DBWElementStyle(MagWindow *w, char *ename, int style, bool add) else if (sptr->next != NULL) { dbwElementUndraw(w, elem); - freeMagic(sptr->next); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, sptr->next); sptr->next = sptr->next->next; + freeMagic1_end(&mm1); } } /* mark element's cell as having been modified */ @@ -1279,8 +1285,10 @@ DBWElementClearDef(cellDef) if (!elem) continue; if (elem->rootDef != cellDef) continue; + free_magic1_t mm1 = freeMagic1_init(); for (stylePtr = elem->stylelist; stylePtr != NULL; stylePtr = stylePtr->next) - freeMagic(stylePtr); + freeMagic1(&mm1, stylePtr); + freeMagic1_end(&mm1); if (elem->type == ELEMENT_TEXT) freeMagic(elem->text); diff --git a/drc/DRCcontin.c b/drc/DRCcontin.c index 13bed738..5cc80499 100644 --- a/drc/DRCcontin.c +++ b/drc/DRCcontin.c @@ -547,8 +547,10 @@ DRCContinuous() if (DRCPendingRoot != (DRCPendingCookie *)NULL) { DBReComputeBbox(DRCPendingRoot->dpc_def); - freeMagic((char *) DRCPendingRoot); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *) DRCPendingRoot); DRCPendingRoot = DRCPendingRoot->dpc_next; + freeMagic1_end(&mm1); } /* Give the timestamp manager a chance to update any mismatches. */ diff --git a/drc/DRCtech.c b/drc/DRCtech.c index 27e84be7..278e0542 100644 --- a/drc/DRCtech.c +++ b/drc/DRCtech.c @@ -522,11 +522,13 @@ DRCTechInit() drcTechFreeStyle(); + free_magic1_t mm1 = freeMagic1_init(); for (style = DRCStyleList; style != NULL; style = style->ds_next) { freeMagic(style->ds_name); - freeMagic(style); + freeMagic1(&mm1, style); } + freeMagic1_end(&mm1); DRCStyleList = NULL; } @@ -4079,6 +4081,7 @@ drcTechFinalStyle(style) { for (j = 0; j < DBNumTypes; j++) { + free_magic1_t mm1 = freeMagic1_init(); for (dp = style->DRCRulesTbl[i][j]; dp != NULL; dp = dp->drcc_next) { /* Don't optimize on trigger rules; optimize on the */ @@ -4161,7 +4164,8 @@ drcTechFinalStyle(style) if (dptrig != NULL) { dptrig = dp->drcc_next; - freeMagic((char *)dp->drcc_next); + free_magic1_t mm1_ = freeMagic1_init(); + freeMagic1(&mm1_, (char *)dp->drcc_next); *dp2back = dp->drcc_next->drcc_next; /* Replace this entry so on the next cycle */ @@ -4169,13 +4173,15 @@ drcTechFinalStyle(style) /* even though dp is free'd (below), due to */ /* the one-delayed free mechanism. */ dp->drcc_next = *dp2back; + freeMagic1_end(&mm1_); } else *dp2back = dp->drcc_next; - freeMagic((char *) dp); + freeMagic1(&mm1, (char *) dp); drcRulesOptimized += 1; } + freeMagic1_end(&mm1); } } } diff --git a/ext2sim/ext2sim.c b/ext2sim/ext2sim.c index 6fbf85d9..f56da513 100644 --- a/ext2sim/ext2sim.c +++ b/ext2sim/ext2sim.c @@ -683,8 +683,10 @@ runexttosim: EFVisitDevs(simmergeVisit, PTR2CD(NULL)); TxPrintf("Devices merged: %d\n", esDevsMerged); esFMIndex = 0; + free_magic1_t mm1 = freeMagic1_init(); for (p = devMergeList; p != NULL; p = p->next) - freeMagic((char *)p); + freeMagic1(&mm1, (char *)p); + freeMagic1_end(&mm1); devMergeList = NULL; } diff --git a/ext2spice/ext2hier.c b/ext2spice/ext2hier.c index a9b45f80..5c08a6f5 100644 --- a/ext2spice/ext2hier.c +++ b/ext2spice/ext2hier.c @@ -2201,11 +2201,13 @@ esMakePorts( } /* Free table data */ + free_magic1_t mm1 = freeMagic1_init(); while (flagtop != NULL) { - freeMagic((char *)flagtop); + freeMagic1(&mm1, (char *)flagtop); flagtop = flagtop->fdr_next; } + freeMagic1_end(&mm1); HashKill(&flagHashTable); return 0; } @@ -2337,8 +2339,10 @@ esHierVisit( EFHierVisitDevs(hcf, spcdevHierMergeVisit, (ClientData)NULL); TxPrintf("Devs merged: %d\n", esSpiceDevsMerged); esFMIndex = 0; + free_magic1_t mm1 = freeMagic1_init(); for (p = devMergeList; p != NULL; p = p->next) - freeMagic((char *)p); + freeMagic1(&mm1, (char *)p); + freeMagic1_end(&mm1); devMergeList = NULL; } else if (esDistrJunct) diff --git a/ext2spice/ext2spice.c b/ext2spice/ext2spice.c index ec561721..ca3b753c 100644 --- a/ext2spice/ext2spice.c +++ b/ext2spice/ext2spice.c @@ -1104,8 +1104,10 @@ runexttospice: fprintf(esSpiceF, " "); freeMagic(glist->gll_name); - freeMagic(glist); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, glist); glist = glist->gll_next; + freeMagic1_end(&mm1); } fprintf(esSpiceF, "\n\n"); } @@ -1159,8 +1161,10 @@ runexttospice: EFVisitDevs(devMergeVisit, (ClientData) NULL); TxPrintf("Devs merged: %d\n", esSpiceDevsMerged); esFMIndex = 0; + free_magic1_t mm1 = freeMagic1_init(); for (p = devMergeList; p != NULL; p = p->next) - freeMagic((char *) p); + freeMagic1(&mm1, (char *) p); + freeMagic1_end(&mm1); devMergeList = NULL; } else if (esDistrJunct) @@ -1905,8 +1909,10 @@ topVisit( sname = lnn->lnn_nodeName; if (esDoBlackBox == FALSE || !(def->def_flags & DEF_ABSTRACT)) sname->efnn_port = ++portmax; - freeMagic(lnn); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, lnn); lnn = lnn->lnn_next; + freeMagic1_end(&mm1); } /* Port numbers need not start at zero or be contiguous. They will be */ diff --git a/extflat/EFbuild.c b/extflat/EFbuild.c index 56a67118..77888a20 100644 --- a/extflat/EFbuild.c +++ b/extflat/EFbuild.c @@ -2240,23 +2240,33 @@ efFreeNodeList(head, func) EFAttr *ap; LinkedRect *lr; + free_magic1_t mm1 = freeMagic1_init(); for (node = (EFNode *) head->efnode_next; node != head; node = (EFNode *) node->efnode_next) { - for (ap = node->efnode_attrs; ap; ap = ap->efa_next) - freeMagic((char *) ap); + { + free_magic1_t mm1_ = freeMagic1_init(); + for (ap = node->efnode_attrs; ap; ap = ap->efa_next) + freeMagic1(&mm1_, (char *) ap); + freeMagic1_end(&mm1_); + } if (node->efnode_client != (ClientData)NULL) { if (func != NULL) (*func)(node->efnode_client); freeMagic((char *)node->efnode_client); } - for (lr = node->efnode_disjoint; lr; lr = lr->r_next) - freeMagic((char *)lr); + { + free_magic1_t mm1_ = freeMagic1_init(); + for (lr = node->efnode_disjoint; lr; lr = lr->r_next) + freeMagic1(&mm1_, (char *)lr); + freeMagic1_end(&mm1_); + } - freeMagic((char *) node); + freeMagic1(&mm1, (char *) node); } + freeMagic1_end(&mm1); } /* diff --git a/extflat/EFdef.c b/extflat/EFdef.c index 82cc365e..ef9be0fb 100644 --- a/extflat/EFdef.c +++ b/extflat/EFdef.c @@ -126,11 +126,13 @@ EFDone(func) for (conn = def->def_resistors; conn; conn = conn->conn_next) efFreeConn(conn); + free_magic1_t mm1 = freeMagic1_init(); for (kill = def->def_kills; kill; kill = kill->kill_next) { freeMagic(kill->kill_name); - freeMagic((char *) kill); + freeMagic1(&mm1, (char *) kill); } + freeMagic1_end(&mm1); freeMagic((char *) def); } @@ -157,8 +159,10 @@ EFDone(func) while (plist != NULL) { freeMagic(plist->parm_name); - freeMagic(plist); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, plist); plist = plist->parm_next; + freeMagic1_end(&mm1); } } HashKill(&efDevParamTable); diff --git a/extflat/EFname.c b/extflat/EFname.c index 0be44077..9284573c 100644 --- a/extflat/EFname.c +++ b/extflat/EFname.c @@ -465,18 +465,20 @@ EFHNFree(hierName, prefix, type) { HierName *hn; + free_magic1_t mm1 = freeMagic1_init(); for (hn = hierName; hn; hn = hn->hn_parent) { if (hn == prefix) break; - freeMagic((char *) hn); + freeMagic1(&mm1, (char *) hn); if (efHNStats) { int len = strlen(hn->hn_name); efHNRecord(-HIERNAMESIZE(len), type); } } + freeMagic1_end(&mm1); } /* diff --git a/extract/ExtBasic.c b/extract/ExtBasic.c index 5bcbe284..9e34fac8 100644 --- a/extract/ExtBasic.c +++ b/extract/ExtBasic.c @@ -2361,8 +2361,10 @@ extOutputDevices(def, transList, outFile) break; } } + free_magic1_t mm1 = freeMagic1_init(); for (lt = extSpecialDevice; lt; lt = lt->t_next) - freeMagic((char *)lt); + freeMagic1(&mm1, (char *)lt); + freeMagic1_end(&mm1); } } else @@ -2679,8 +2681,12 @@ extOutputDevices(def, transList, outFile) /* Free the lists */ for (i = 0; i < extTransRec.tr_nterm; i++) + { + free_magic1_t mm1 = freeMagic1_init(); for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next) - freeMagic((char *)lb); + freeMagic1(&mm1, (char *)lb); + freeMagic1_end(&mm1); + } freeMagic((char *)extSpecialBounds); /* Put the region list back the way we found it: */ @@ -2868,8 +2874,12 @@ extOutputDevices(def, transList, outFile) /* Free the lists */ for (i = 0; i < n; i++) + { + free_magic1_t mm1 = freeMagic1_init(); for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next) - freeMagic((char *)lb); + freeMagic1(&mm1, (char *)lb); + freeMagic1_end(&mm1); + } freeMagic((char *)extSpecialBounds); /* Put the region list back the way we found it: */ @@ -3016,8 +3026,12 @@ extOutputDevices(def, transList, outFile) /* Free the lists */ for (i = 0; i < n; i++) + { + free_magic1_t mm1 = freeMagic1_init(); for (lb = extSpecialBounds[i]; lb != NULL; lb = lb->b_next) - freeMagic((char *)lb); + freeMagic1(&mm1, (char *)lb); + freeMagic1_end(&mm1); + } freeMagic((char *)extSpecialBounds); /* Put the region list back the way we found it: */ @@ -3850,12 +3864,14 @@ extTransPerimFunc(bp) extTermAPFunc, (ClientData)&eapd); shared = 1; + free_magic1_t mm1 = freeMagic1_init(); while (eapd.eapd_shared) { shared++; - freeMagic(eapd.eapd_shared); + freeMagic1(&mm1, eapd.eapd_shared); eapd.eapd_shared = eapd.eapd_shared->nl_next; } + freeMagic1_end(&mm1); extTransRec.tr_termarea[thisterm] = eapd.eapd_area; extTransRec.tr_termperim[thisterm] = eapd.eapd_perim; diff --git a/extract/ExtHard.c b/extract/ExtHard.c index f2890012..a8f5beaf 100644 --- a/extract/ExtHard.c +++ b/extract/ExtHard.c @@ -495,6 +495,7 @@ extHardFreeAll(def, tReg) arg.fra_each = (int (*)()) NULL; arg.fra_region = (ExtRegion *) extUnInit; + free_magic1_t mm1 = freeMagic1_init(); for (reg = tReg; reg; reg = reg->treg_next) { /* Reset all ti_client fields to extUnInit */ @@ -506,11 +507,16 @@ extHardFreeAll(def, tReg) } /* Free all LabelLists and then the region */ - for (ll = reg->treg_labels; ll; ll = ll->ll_next) { - if (ll->ll_label->lab_flags & LABEL_GENERATE) freeMagic(ll->ll_label); - freeMagic((char *) ll); + free_magic1_t mm1_ = freeMagic1_init(); + for (ll = reg->treg_labels; ll; ll = ll->ll_next) + { + if (ll->ll_label->lab_flags & LABEL_GENERATE) freeMagic(ll->ll_label); + freeMagic1(&mm1_, (char *) ll); + } + freeMagic1_end(&mm1_); } - freeMagic((char *) reg); + freeMagic1(&mm1, (char *) reg); } + freeMagic1_end(&mm1); } diff --git a/extract/ExtLength.c b/extract/ExtLength.c index f87edf40..5b019a96 100644 --- a/extract/ExtLength.c +++ b/extract/ExtLength.c @@ -293,22 +293,30 @@ extLength(rootUse, f) * each of the receivers. Free each driver label * as it is processed. */ - for (dLab = dList; dLab; dLab = dLab->lab_next) { - for (rLab = rList; rLab; rLab = rLab->lab_next) + free_magic1_t mm1 = freeMagic1_init(); + for (dLab = dList; dLab; dLab = dLab->lab_next) { - extPathPairDistance(dLab, rLab, &min, &max); - fprintf(f, "distance %s %s %d %d\n", + for (rLab = rList; rLab; rLab = rLab->lab_next) + { + extPathPairDistance(dLab, rLab, &min, &max); + fprintf(f, "distance %s %s %d %d\n", dLab->lab_text, rLab->lab_text, min, max); - } + } - /* Free the driver label */ - freeMagic((char *) dLab); + /* Free the driver label */ + freeMagic1(&mm1, (char *) dLab); + } + freeMagic1_end(&mm1); } /* Free all the receiver labels built up during this iteration */ - for (rLab = rList; rLab; rLab = rLab->lab_next) - freeMagic((char *) rLab); + { + free_magic1_t mm1 = freeMagic1_init(); + for (rLab = rList; rLab; rLab = rLab->lab_next) + freeMagic1(&mm1, (char *) rLab); + freeMagic1_end(&mm1); + } /* For sanity since we've freed the driver label list */ HashSetValue(he, (ClientData) NULL); diff --git a/extract/ExtMain.c b/extract/ExtMain.c index d1494579..407b5032 100644 --- a/extract/ExtMain.c +++ b/extract/ExtMain.c @@ -426,8 +426,10 @@ extDefPush(defList) while (defList != NULL) { StackPush((ClientData)defList->ld_def, extDefStack); - freeMagic(defList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, defList); defList = defList->ld_next; + freeMagic1_end(&mm1); } } @@ -569,8 +571,12 @@ extParents(use, doExtract) extDefListFunc(use, &defList); /* use->cu_def is on the top of the list, so remove it */ - freeMagic(defList); - defList = defList->ld_next; + { + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, defList); + defList = defList->ld_next; + freeMagic1_end(&mm1); + } while (defList != NULL) { @@ -585,8 +591,10 @@ extParents(use, doExtract) sl = newsl; } - freeMagic(defList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, defList); defList = defList->ld_next; + freeMagic1_end(&mm1); } /* Mark all defs as being unvisited */ @@ -601,10 +609,14 @@ extParents(use, doExtract) StackFree(extDefStack); /* Replace any modified substrate planes in use->cu_def's children */ - for (; sl; sl = sl->sl_next) { - ExtRevertSubstrate(sl->sl_def, sl->sl_plane); - freeMagic(sl); + free_magic1_t mm1 = freeMagic1_init(); + for (; sl; sl = sl->sl_next) + { + ExtRevertSubstrate(sl->sl_def, sl->sl_plane); + freeMagic1(&mm1, sl); + } + freeMagic1_end(&mm1); } } @@ -765,8 +777,12 @@ ExtractOneCell(def, outName, doLength) extDefListFunc(&dummyUse, &defList); /* def is on top of the list, so remove it */ - freeMagic(defList); - defList = defList->ld_next; + { + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, defList); + defList = defList->ld_next; + freeMagic1_end(&mm1); + } /* Prepare substrates of all children of def */ while (defList != NULL) @@ -781,8 +797,10 @@ ExtractOneCell(def, outName, doLength) newsl->sl_next = sl; sl = newsl; } - freeMagic(defList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, defList); defList = defList->ld_next; + freeMagic1_end(&mm1); } savePlane = ExtCell(def, outName, doLength); @@ -790,11 +808,13 @@ ExtractOneCell(def, outName, doLength) /* Restore all modified substrate planes */ if (savePlane != NULL) ExtRevertSubstrate(def, savePlane); + free_magic1_t mm1 = freeMagic1_init(); for (; sl; sl = sl->sl_next) { ExtRevertSubstrate(sl->sl_def, sl->sl_plane); - freeMagic(sl); + freeMagic1(&mm1, sl); } + freeMagic1_end(&mm1); } /* ------------------------------------------------------------------------- */ @@ -999,12 +1019,14 @@ extExtractStack(stack, doExtract, rootDef) } /* Replace any modified substrate planes */ + free_magic1_t mm1 = freeMagic1_init(); for (; sl; sl = sl->sl_next) { ExtRevertSubstrate(sl->sl_def, sl->sl_plane); sl->sl_def->cd_flags &= ~CDNOEXTRACT; - freeMagic(sl); + freeMagic1(&mm1, sl); } + freeMagic1_end(&mm1); if (!doExtract) { diff --git a/extract/ExtRegion.c b/extract/ExtRegion.c index a244a137..ff216114 100644 --- a/extract/ExtRegion.c +++ b/extract/ExtRegion.c @@ -507,8 +507,10 @@ ExtFreeRegions(regList) { ExtRegion *reg; + free_magic1_t mm1 = freeMagic1_init(); for (reg = regList; reg; reg = reg->reg_next) - freeMagic((char *) reg); + freeMagic1(&mm1, (char *) reg); + freeMagic1_end(&mm1); } void @@ -518,12 +520,16 @@ ExtFreeLabRegions(regList) LabRegion *lreg; LabelList *ll; + free_magic1_t mm1 = freeMagic1_init(); for (lreg = regList; lreg; lreg = lreg->lreg_next) { + free_magic1_t mm1_ = freeMagic1_init(); for (ll = lreg->lreg_labels; ll; ll = ll->ll_next) - freeMagic((char *) ll); - freeMagic((char *) lreg); + freeMagic1(&mm1_, (char *) ll); + freeMagic1_end(&mm1_); + freeMagic1(&mm1, (char *) lreg); } + freeMagic1_end(&mm1); } void @@ -533,13 +539,17 @@ ExtFreeHierLabRegions(regList) ExtRegion *reg; LabelList *ll; + free_magic1_t mm1 = freeMagic1_init(); for (reg = regList; reg; reg = reg->reg_next) { + free_magic1_t mm1_ = freeMagic1_init(); for (ll = ((LabRegion *)reg)->lreg_labels; ll; ll = ll->ll_next) { freeMagic((char *) ll->ll_label); - freeMagic((char *) ll); + freeMagic1(&mm1_, (char *) ll); } - freeMagic((char *) reg); + freeMagic1_end(&mm1_); + freeMagic1(&mm1, (char *) reg); } + freeMagic1_end(&mm1); } diff --git a/extract/ExtTech.c b/extract/ExtTech.c index 493cbcc3..39942fe7 100644 --- a/extract/ExtTech.c +++ b/extract/ExtTech.c @@ -884,6 +884,7 @@ extTechStyleInit(style) if (style->exts_device[r] != NULL) { ExtDevice *devptr; + free_magic1_t mm1 = freeMagic1_init(); for (devptr = style->exts_device[r]; devptr; devptr = devptr->exts_next) { @@ -906,15 +907,18 @@ extTechStyleInit(style) { if (devptr->exts_deviceParams->pl_name != NULL) freeMagic(devptr->exts_deviceParams->pl_name); - freeMagic(devptr->exts_deviceParams); + free_magic1_t mm1_ = freeMagic1_init(); + freeMagic1(&mm1_, devptr->exts_deviceParams); devptr->exts_deviceParams = devptr->exts_deviceParams->pl_next; + freeMagic1_end(&mm1_); } } if (devptr->exts_deviceResist.ht_table != (HashEntry **) NULL) HashKill(&devptr->exts_deviceResist); - freeMagic(devptr); + freeMagic1(&mm1, devptr); } + freeMagic1_end(&mm1); style->exts_device[r] = (ExtDevice *)NULL; } } @@ -1125,11 +1129,13 @@ ExtTechInit() /* Forget all the extract style names */ + free_magic1_t mm1 = freeMagic1_init(); for (style = ExtAllStyles; style != NULL; style = style->exts_next) { freeMagic(style->exts_name); - freeMagic(style); + freeMagic1(&mm1, style); } + freeMagic1_end(&mm1); ExtAllStyles = NULL; if (allExtractTypes == NULL) @@ -2626,8 +2632,10 @@ ExtTechLine(sectionName, argc, argv) { if (subcktParams->pl_name != NULL) freeMagic(subcktParams->pl_name); - freeMagic(subcktParams); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, subcktParams); subcktParams = subcktParams->pl_next; + freeMagic1_end(&mm1); } goto usage; } diff --git a/extract/ExtYank.c b/extract/ExtYank.c index b89c4256..18ee7909 100644 --- a/extract/ExtYank.c +++ b/extract/ExtYank.c @@ -120,8 +120,10 @@ extHierFreeLabels(def) { Label *lab; + free_magic1_t mm1 = freeMagic1_init(); for (lab = def->cd_labels; lab; lab = lab->lab_next) - freeMagic((char *) lab); + freeMagic1(&mm1, (char *) lab); + freeMagic1_end(&mm1); def->cd_labels = (Label *) NULL; } diff --git a/gcr/gcrChannel.c b/gcr/gcrChannel.c index 1252d99a..5f1691aa 100644 --- a/gcr/gcrChannel.c +++ b/gcr/gcrChannel.c @@ -176,8 +176,10 @@ GCRFreeChannel(ch) freeMagic((char *) ch->gcr_bPins); freeMagic((char *) ch->gcr_lPins); freeMagic((char *) ch->gcr_rPins); + free_magic1_t mm1 = freeMagic1_init(); for (net = ch->gcr_nets; net; net = net->gcr_next) - freeMagic((char *) net); + freeMagic1(&mm1, (char *) net); + freeMagic1_end(&mm1); freeMagic((char *) ch->gcr_lCol); freeMagic((char *) ch->gcr_dRowsByCol); diff --git a/gcr/gcrRoute.c b/gcr/gcrRoute.c index 10df05c8..f9e13cbc 100644 --- a/gcr/gcrRoute.c +++ b/gcr/gcrRoute.c @@ -127,8 +127,10 @@ bottom: * the channel and cause the net structure to become invalid * anyway. */ + free_magic1_t mm1 = freeMagic1_init(); for (net = ch->gcr_nets; net; net = net->gcr_next) - freeMagic((char *) net); + freeMagic1(&mm1, (char *) net); + freeMagic1_end(&mm1); ch->gcr_nets = NULL; return (gcrRouterErrors); diff --git a/graphics/W3Dmain.c b/graphics/W3Dmain.c index 7b22bc69..b6a4bf42 100644 --- a/graphics/W3Dmain.c +++ b/graphics/W3Dmain.c @@ -309,6 +309,7 @@ w3dFillOps(trans, tile, cliprect, ztop, zbot) } else { + free_magic1_t mm1 = freeMagic1_init(); for (segptr = tilesegs; segptr != NULL; segptr = segptr->r_next) { GeoTransRect(trans, &segptr->r_r, &r2); @@ -322,8 +323,9 @@ w3dFillOps(trans, tile, cliprect, ztop, zbot) } else w3dFillEdge(&r, &r2, ztop, zbot); - freeMagic(segptr); + freeMagic1(&mm1, segptr); } + freeMagic1_end(&mm1); /* For non-manhattan tiles, GrBoxOutline only returns */ /* the manhattan edges. This leaves the (possibly */ diff --git a/graphics/grClip.c b/graphics/grClip.c index 24afe3de..680f68c9 100644 --- a/graphics/grClip.c +++ b/graphics/grClip.c @@ -912,6 +912,7 @@ GrBox(MagWindow *mw, Transform *trans, Tile *tile) } else { + free_magic1_t mm1 = freeMagic1_init(); /* non-rectangular box; requires drawing segments */ for (segptr = tilesegs; segptr != NULL; segptr = segptr->r_next) { @@ -924,8 +925,9 @@ GrBox(MagWindow *mw, Transform *trans, Tile *tile) (*grDrawLinePtr)(r.r_xbot, r.r_ybot, r.r_xtop, r.r_ytop); /* Free memory, if it was allocated for outline segments */ - freeMagic(segptr); + freeMagic1(&mm1, segptr); } + freeMagic1_end(&mm1); /* For non-manhattan tiles, the manhattan parts of the */ /* boundary have already been drawn. The diagonal boundary */ diff --git a/graphics/grDStyle.c b/graphics/grDStyle.c index 1604838a..4aa9225f 100644 --- a/graphics/grDStyle.c +++ b/graphics/grDStyle.c @@ -632,8 +632,10 @@ recovery: GrStyleTable[i] = sstyle->style; /* Add short style name reverse lookup table entry */ GrStyleNames[(int)(sstyle->shortname)] = i; - freeMagic(sstyle); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, sstyle); sstyle = sstyle->next; + freeMagic1_end(&mm1); } } dstylehead = NULL; diff --git a/grouter/grouteChan.c b/grouter/grouteChan.c index 60ef46dc..29b8f98d 100644 --- a/grouter/grouteChan.c +++ b/grouter/grouteChan.c @@ -763,11 +763,13 @@ glChanBlockDens(ch) } /* Second pass to propagate blockages to nearby areas */ + free_magic1_t mm1 = freeMagic1_init(); for (pa = glChanPaintList, glChanPaintList = NULL; pa; pa = pa->pa_next) { glChanFlood(&pa->pa_area, pa->pa_type); - freeMagic((char *) pa); + freeMagic1(&mm1, (char *) pa); } + freeMagic1_end(&mm1); } while (glChanPaintList != NULL); } diff --git a/grouter/grouteMain.c b/grouter/grouteMain.c index 4e3f6e29..79fdccfd 100644 --- a/grouter/grouteMain.c +++ b/grouter/grouteMain.c @@ -238,8 +238,10 @@ glClientFree(chanList, netList) for (net = netList->nnl_nets; net; net = net->nnet_next) { nclient = (NetClient *) net->nnet_cdata; + free_magic1_t mm1 = freeMagic1_init(); for (cz = nclient->nc_pens; cz; cz = cz->cz_next) - freeMagic((char *) cz); + freeMagic1(&mm1, (char *) cz); + freeMagic1_end(&mm1); net->nnet_cdata = (ClientData) NULL; } } diff --git a/grouter/groutePath.c b/grouter/groutePath.c index f4dd32a9..593c49b2 100644 --- a/grouter/groutePath.c +++ b/grouter/groutePath.c @@ -188,8 +188,10 @@ glPathFreePerm(list) { GlPoint *p; + free_magic1_t mm1 = freeMagic1_init(); for (p = list; p; p = p->gl_path) - freeMagic((char *) p); + freeMagic1(&mm1, (char *) p); + freeMagic1_end(&mm1); return 0; } diff --git a/grouter/groutePen.c b/grouter/groutePen.c index 35126bc9..6f9263c0 100644 --- a/grouter/groutePen.c +++ b/grouter/groutePen.c @@ -103,8 +103,10 @@ glPenClearPerChan(net) czNet = czNet->cz_next) { gc = (GlobChan *) czNet->cz_chan->gcr_client; + free_magic1_t mm1 = freeMagic1_init(); for (czChan = gc->gc_penList; czChan; czChan = czChan->cz_next) - freeMagic((char *) czChan); + freeMagic1(&mm1, (char *) czChan); + freeMagic1_end(&mm1); gc->gc_penList = (CZone *) NULL; } return 0; @@ -457,8 +459,10 @@ glPenAssignCosts(cz, netList) } /* Cleanup */ + free_magic1_t mm1 = freeMagic1_init(); for (ns = crossNets; ns; ns = ns->ns_next) - freeMagic((char *) ns); + freeMagic1(&mm1, (char *) ns); + freeMagic1_end(&mm1); freeMagic((char *) crossArray); } diff --git a/grouter/grouteTest.c b/grouter/grouteTest.c index 48ec481d..4a1beaed 100644 --- a/grouter/grouteTest.c +++ b/grouter/grouteTest.c @@ -505,8 +505,10 @@ glHistoDump() fprintf(fp, "TOTAL: %d\n", total); /* Free memory */ + free_magic1_t mm1 = freeMagic1_init(); for (gh = glNetHistoList; gh; gh = gh->glh_next) - freeMagic((char *) gh); + freeMagic1(&mm1, (char *) gh); + freeMagic1_end(&mm1); glNetHistoList = NULL; /* Done */ diff --git a/lef/defRead.c b/lef/defRead.c index 939bfae0..e103e883 100644 --- a/lef/defRead.c +++ b/lef/defRead.c @@ -699,6 +699,7 @@ endCoord: /* Process each segment and paint into the layout */ + free_magic1_t mm1 = freeMagic1_init(); while (routeTop != NULL) { /* paint */ @@ -752,9 +753,10 @@ endCoord: } /* advance to next point and free record (1-delayed) */ - freeMagic((char *)routeTop); + freeMagic1(&mm1, (char *)routeTop); routeTop = routeTop->r_next; } + freeMagic1_end(&mm1); return token; /* Pass back the last token found */ } @@ -1633,6 +1635,7 @@ DefReadPins( else flags |= LABEL_STICKY; + free_magic1_t mm1 = freeMagic1_init(); while (rectList != NULL) { GeoTransRect(&t, &rectList->r_r, &topRect); @@ -1658,9 +1661,10 @@ DefReadPins( GEO_CENTER, pinname, rectList->r_type, pinDir | pinUse | flags, pinNum); - freeMagic(rectList); + freeMagic1(&mm1, rectList); rectList = rectList->r_next; } + freeMagic1_end(&mm1); pending = FALSE; pinNum++; } @@ -1681,6 +1685,7 @@ DefReadPins( else flags |= LABEL_STICKY; + free_magic1_t mm1 = freeMagic1_init(); while (rectList != NULL) { GeoTransRect(&t, &rectList->r_r, &topRect); @@ -1715,9 +1720,10 @@ DefReadPins( GEO_CENTER, pinname, rectList->r_type, pinDir | pinUse | flags, pinNum); - freeMagic(rectList); + freeMagic1(&mm1, rectList); rectList = rectList->r_next; } + freeMagic1_end(&mm1); pending = FALSE; pinNum++; } diff --git a/lef/defWrite.c b/lef/defWrite.c index 7576dc20..88659873 100644 --- a/lef/defWrite.c +++ b/lef/defWrite.c @@ -2559,6 +2559,7 @@ defWriteBlockages( { if (defobsdata.blockData[i] == NULL) continue; fprintf(f, " - LAYER %s", defobsdata.baseNames[i]); + free_magic1_t mm1 = freeMagic1_init(); for (lr = defobsdata.blockData[i]; lr; lr = lr->r_next) { fprintf(f, "\n RECT ( %.10g %.10g ) ( %.10g %.10g )", @@ -2566,8 +2567,9 @@ defWriteBlockages( (float)(lr->r_r.r_ybot * oscale), (float)(lr->r_r.r_xtop * oscale), (float)(lr->r_r.r_ytop * oscale)); - freeMagic(lr); + freeMagic1(&mm1, lr); } + freeMagic1_end(&mm1); fprintf(f, " ;\n"); } fprintf(f, "END BLOCKAGES\n\n"); diff --git a/lef/lefCmd.c b/lef/lefCmd.c index fd7b31fb..8bdba11d 100644 --- a/lef/lefCmd.c +++ b/lef/lefCmd.c @@ -532,8 +532,10 @@ CmdLef( if (!strcasecmp(inet, "none")) { /* Remove all net names from the list */ + free_magic1_t mm1 = freeMagic1_init(); for (lnn = lefIgnoreNets; lnn; lnn = lnn->lnn_next) - freeMagic(lnn); + freeMagic1(&mm1, lnn); + freeMagic1_end(&mm1); lefIgnoreNets = NULL; } else diff --git a/lef/lefRead.c b/lef/lefRead.c index 7d9bb76e..91e304b6 100644 --- a/lef/lefRead.c +++ b/lef/lefRead.c @@ -701,8 +701,10 @@ LefRedefined( /* Only one name associated with the record, so */ /* just clear all the allocated information. */ + free_magic1_t mm1 = freeMagic1_init(); for (viaLR = lefl->info.via.lr; viaLR != NULL; viaLR = viaLR->r_next) - freeMagic(viaLR); + freeMagic1(&mm1, viaLR); + freeMagic1_end(&mm1); newlefl = lefl; } else @@ -1077,14 +1079,16 @@ LefReadPolygon( plist = (Point *)mallocMagic(lpoints * sizeof(Point)); lpoints = 0; + free_magic1_t mm1 = freeMagic1_init(); while (lr != NULL) { plist[*ppoints - lpoints - 1].p_x = lr->r_r.r_xbot; plist[*ppoints - lpoints - 1].p_y = lr->r_r.r_ybot; - freeMagic(lr); + freeMagic1(&mm1, lr); lpoints++; lr = lr->r_next; } + freeMagic1_end(&mm1); return plist; } @@ -1450,6 +1454,7 @@ LefReadPort( rectList = LefReadGeometry(lefMacro, f, oscale, gdsOffset, TRUE, is_imported); + free_magic1_t mm1 = freeMagic1_init(); while (rectList != NULL) { if ((pinNum >= 0) || (lanno != NULL)) @@ -1529,9 +1534,10 @@ LefReadPort( if (lanno != NULL) lanno = NULL; } - freeMagic((char *)rectList); + freeMagic1(&mm1, (char *)rectList); rectList = rectList->r_next; } + freeMagic1_end(&mm1); } /* diff --git a/lef/lefWrite.c b/lef/lefWrite.c index f2981332..a82f60de 100644 --- a/lef/lefWrite.c +++ b/lef/lefWrite.c @@ -1861,6 +1861,7 @@ lefWriteMacro( DBPaint(lc.lefYank, &layerBound, ttype); } + free_magic1_t mm1 = freeMagic1_init(); for (thislll = lll; thislll; thislll = thislll->lll_next) { int mspace; @@ -1879,8 +1880,9 @@ lefWriteMacro( thislll->lll_area.r_ytop += mspace; DBErase(lc.lefYank, &thislll->lll_area, lab->lab_type); - freeMagic(thislll); + freeMagic1(&mm1, thislll); } + freeMagic1_end(&mm1); if (setback >= 0) { diff --git a/mzrouter/mzEstimate.c b/mzrouter/mzEstimate.c index 53157f41..5da125f8 100644 --- a/mzrouter/mzEstimate.c +++ b/mzrouter/mzEstimate.c @@ -497,10 +497,12 @@ mzReclaimTCFunc(tile, notUsed) Estimate *e; /* free estimates attached to tilecosts struc */ + free_magic1_t mm1 = freeMagic1_init(); for(e=tc->tc_estimates; e!=NULL; e=e->e_next) { - freeMagic((char *) e); + freeMagic1(&mm1, (char *) e); } + freeMagic1_end(&mm1); /* free tilecosts struc */ freeMagic((char *) (tile->ti_client)); diff --git a/mzrouter/mzTech.c b/mzrouter/mzTech.c index 7fd82d47..8fe3a5a9 100644 --- a/mzrouter/mzTech.c +++ b/mzrouter/mzTech.c @@ -123,16 +123,24 @@ MZFreeParameters(params) RouteLayer *rL; RouteContact *rC; - for (rL = params->mp_rLayers; rL; rL = rL->rl_next) { - ListDealloc(rL->rl_contactL); - TiFreePlane(rL->rl_routeType.rt_hBlock); - TiFreePlane(rL->rl_routeType.rt_vBlock); - freeMagic(rL); + free_magic1_t mm1 = freeMagic1_init(); + for (rL = params->mp_rLayers; rL; rL = rL->rl_next) + { + ListDealloc(rL->rl_contactL); + TiFreePlane(rL->rl_routeType.rt_hBlock); + TiFreePlane(rL->rl_routeType.rt_vBlock); + freeMagic1(&mm1, rL); + } + freeMagic1_end(&mm1); } - for (rC = params->mp_rContacts; rC; rC = rC->rc_next) - freeMagic(rC); + { + free_magic1_t mm1 = freeMagic1_init(); + for (rC = params->mp_rContacts; rC; rC = rC->rc_next) + freeMagic1(&mm1, rC); + freeMagic1_end(&mm1); + } } @@ -159,12 +167,14 @@ MZTechInit() /* Clear out any old information */ if (mzStyles != NULL) { + free_magic1_t mm1 = freeMagic1_init(); for (style = mzStyles; style != NULL; style = style->ms_next) { MZFreeParameters(&(style->ms_parms)); freeMagic(style->ms_name); - freeMagic(style); + freeMagic1(&mm1, style); } + freeMagic1_end(&mm1); } /* Initially no route types defined */ diff --git a/netmenu/NMcmdAK.c b/netmenu/NMcmdAK.c index f1d0faff..d79ce854 100644 --- a/netmenu/NMcmdAK.c +++ b/netmenu/NMcmdAK.c @@ -157,7 +157,8 @@ NMCmdCleanup(w, cmd) * is in progress. */ - for (p = nmCleanupList; p != NULL; p = p->nmcl_next) + free_magic1_t mm1 = freeMagic1_init(); + for (p = nmCleanupList; p != NULL; p = p->nmcl_next) { char answer[30]; int indx, defaultValue; @@ -184,11 +185,15 @@ NMCmdCleanup(w, cmd) switch (indx) { case 0: + { + free_magic1_t mm1_ = freeMagic1_init(); while (p != NULL) { - freeMagic((char *) p); + freeMagic1(&mm1_, (char *) p); p = p->nmcl_next; } + freeMagic1_end(&mm1_); + } return; case 1: NMDeleteNet(p->nmcl_name); @@ -197,8 +202,9 @@ NMCmdCleanup(w, cmd) NMDeleteTerm(p->nmcl_name); break; } - freeMagic((char *) p); + freeMagic1(&mm1, (char *) p); } + freeMagic1_end(&mm1); if (nmCleanupList == NULL) TxPrintf("No problems found.\n"); diff --git a/netmenu/NMnetlist.c b/netmenu/NMnetlist.c index 0f65583d..337f41e1 100644 --- a/netmenu/NMnetlist.c +++ b/netmenu/NMnetlist.c @@ -350,14 +350,16 @@ NMDeleteNet(net) */ next = ne->ne_next; + free_magic1_t mm1 = freeMagic1_init(); while (TRUE) { NMUndo(next->ne_name, net, NMUE_REMOVE); HashSetValue(HashFind(&nmCurrentNetlist->nl_table, next->ne_name), 0); - freeMagic((char *) next); + freeMagic1(&mm1, (char *) next); if (next == ne) break; next = next->ne_next; } + freeMagic1_end(&mm1); } /* diff --git a/netmenu/NMwiring.c b/netmenu/NMwiring.c index 22b8a968..95b7204b 100644 --- a/netmenu/NMwiring.c +++ b/netmenu/NMwiring.c @@ -180,6 +180,7 @@ NMRipup() */ TTMaskZero(&maskBits); + free_magic1_t mm1 = freeMagic1_init(); while (list != NULL) { DBErase(EditCellUse->cu_def, &list->nmwa_area, list->nmwa_type); @@ -189,9 +190,10 @@ NMRipup() DRCCheckThis(EditCellUse->cu_def, TT_CHECKPAINT, &list->nmwa_area); DBWAreaChanged(EditCellUse->cu_def, &list->nmwa_area, DBW_ALLWINDOWS, &DBAllButSpaceBits); - freeMagic((char *) list); + freeMagic1(&mm1, (char *) list); list = list->nmwa_next; } + freeMagic1_end(&mm1); DBReComputeBbox(EditCellUse->cu_def); return 0; } @@ -240,6 +242,7 @@ nmRipLocFunc(rect, name, label, area) &TiPlaneRect, nmwRipTileFunc, (ClientData) &list); TTMaskZero(&maskBits); TTMaskClearType(&maskBits, label->lab_type); + free_magic1_t mm1 = freeMagic1_init(); while (list != NULL) { DBErase(EditCellUse->cu_def, &list->nmwa_area, list->nmwa_type); @@ -247,9 +250,10 @@ nmRipLocFunc(rect, name, label, area) (void) DBEraseLabel(EditCellUse->cu_def, &list->nmwa_area, &maskBits, NULL); TTMaskClearType(&maskBits, list->nmwa_type); (void) GeoInclude(&list->nmwa_area, area); - freeMagic((char *) list); + freeMagic1(&mm1, (char *) list); list = list->nmwa_next; } + freeMagic1_end(&mm1); return 0; } diff --git a/plot/plotPS.c b/plot/plotPS.c index 481529c4..f6699e0c 100644 --- a/plot/plotPS.c +++ b/plot/plotPS.c @@ -181,23 +181,35 @@ PlotPSTechInit() /* Clear out any old information */ - for (style = plotPSStyles; style != NULL; style = style->grs_next) { - freeMagic((char *) style); + free_magic1_t mm1 = freeMagic1_init(); + for (style = plotPSStyles; style != NULL; style = style->grs_next) + { + freeMagic1(&mm1, (char *) style); + } + freeMagic1_end(&mm1); + plotPSStyles = NULL; } - plotPSStyles = NULL; - for (pattern = plotPSPatterns; pattern != NULL; pattern = pattern->pat_next) { - freeMagic((char *) pattern); + free_magic1_t mm1 = freeMagic1_init(); + for (pattern = plotPSPatterns; pattern != NULL; pattern = pattern->pat_next) + { + freeMagic1(&mm1, (char *) pattern); + } + freeMagic1_end(&mm1); + plotPSPatterns = NULL; } - plotPSPatterns = NULL; - for (color = plotPSColors; color != NULL; color = color->col_next) { - freeMagic((char *) color); + free_magic1_t mm1 = freeMagic1_init(); + for (color = plotPSColors; color != NULL; color = color->col_next) + { + freeMagic1(&mm1, (char *) color); + } + freeMagic1_end(&mm1); + plotPSColors = NULL; } - plotPSColors = NULL; if (!PlotPSIdFont) StrDup(&PlotPSIdFont, defaultFont); diff --git a/plot/plotVers.c b/plot/plotVers.c index ea4ed2a2..5dc129a8 100644 --- a/plot/plotVers.c +++ b/plot/plotVers.c @@ -216,10 +216,12 @@ PlotVersTechInit() { VersatecStyle *style; + free_magic1_t mm1 = freeMagic1_init(); for (style = plotVersStyles; style != NULL; style = style->vs_next) { - freeMagic((char *) style); + freeMagic1(&mm1, (char *) style); } + freeMagic1_end(&mm1); plotVersStyles = NULL; if (PlotVersPrinter == NULL) @@ -267,10 +269,12 @@ PlotColorVersTechInit() { VersatecStyle *style; + free_magic1_t mm1 = freeMagic1_init(); for (style = plotColorVersStyles; style != NULL; style = style->vs_next) { - freeMagic((char *) style); + freeMagic1(&mm1, (char *) style); } + freeMagic1_end(&mm1); plotColorVersStyles = NULL; if (PlotVersPrinter == NULL) diff --git a/plow/PlowMain.c b/plow/PlowMain.c index b854e1bb..9b2275d7 100644 --- a/plow/PlowMain.c +++ b/plow/PlowMain.c @@ -239,11 +239,13 @@ PlowClearBound() pb = plowBoundaryList; plowCheckBoundary = FALSE; plowBoundaryList = (PlowBoundary *) NULL; + free_magic1_t mm1 = freeMagic1_init(); for ( ; pb; pb = pb->pb_next) { DBWHLRedraw(pb->pb_rootDef, &pb->pb_rootArea, TRUE); - freeMagic((char *) pb); + freeMagic1(&mm1, (char *) pb); } + freeMagic1_end(&mm1); } /* diff --git a/plow/PlowTech.c b/plow/PlowTech.c index 611ee225..6a9ceaa4 100644 --- a/plow/PlowTech.c +++ b/plow/PlowTech.c @@ -127,11 +127,19 @@ PlowDRCInit() { for (j = 0; j < DBNumTypes; j++) { - for (pr = plowWidthRulesTbl[i][j]; pr; pr = pr->pr_next) - freeMagic((char *)pr); + { + free_magic1_t mm1 = freeMagic1_init(); + for (pr = plowWidthRulesTbl[i][j]; pr; pr = pr->pr_next) + freeMagic1(&mm1, (char *)pr); + freeMagic1_end(&mm1); + } - for (pr = plowSpacingRulesTbl[i][j]; pr; pr = pr->pr_next) - freeMagic((char *)pr); + { + free_magic1_t mm1 = freeMagic1_init(); + for (pr = plowSpacingRulesTbl[i][j]; pr; pr = pr->pr_next) + freeMagic1(&mm1, (char *)pr); + freeMagic1_end(&mm1); + } plowWidthRulesTbl[i][j] = NULL; plowSpacingRulesTbl[i][j] = NULL; @@ -697,6 +705,7 @@ plowTechOptimizeRule(ruleList) */ pCand = ruleList; pCandLast = (PlowRule *) NULL; + free_magic1_t mm1 = freeMagic1_init(); while (pCand) { for (pr = ruleList; pr; pr = pr->pr_next) @@ -718,7 +727,7 @@ plowTechOptimizeRule(ruleList) * Delete pCand, and resume outer loop with the * new values of pCand and pCandLast set below. */ - freeMagic((char *) pCand); + freeMagic1(&mm1, (char *) pCand); if (pCandLast) pCandLast->pr_next = pCand->pr_next; else @@ -734,6 +743,7 @@ plowTechOptimizeRule(ruleList) next: ; } + freeMagic1_end(&mm1); return (ruleList); } diff --git a/resis/ResBasic.c b/resis/ResBasic.c index df685c3f..a8e5a685 100644 --- a/resis/ResBasic.c +++ b/resis/ResBasic.c @@ -92,6 +92,7 @@ resAllPortNodes(tile, list) resPort *pl; tileJunk *junk = (tileJunk *)TiGetClientPTR(tile); + free_magic1_t mm1 = freeMagic1_init(); for (pl = junk->portList; pl; pl = pl->rp_nextPort) { x = pl->rp_loc.p_x; @@ -103,8 +104,9 @@ resAllPortNodes(tile, list) resptr->rn_name = pl->rp_nodename; ResAddToQueue(resptr, list); NEWBREAK(resptr, tile, x, y, NULL); - freeMagic(pl); + freeMagic1(&mm1, pl); } + freeMagic1_end(&mm1); } /* diff --git a/resis/ResRex.c b/resis/ResRex.c index 891f0ad3..9be667d9 100644 --- a/resis/ResRex.c +++ b/resis/ResRex.c @@ -685,11 +685,13 @@ typedef enum { HashKill(&ResProcessedTable); /* Revert substrate planes */ + free_magic1_t mm1 = freeMagic1_init(); for (sl = resisdata.savePlanes; sl; sl = sl->sl_next) { ExtRevertSubstrate(sl->sl_def, sl->sl_plane); - freeMagic(sl); + freeMagic1(&mm1, sl); } + freeMagic1_end(&mm1); /* turn back on undo stuff */ UndoEnable(); diff --git a/router/rtrStem.c b/router/rtrStem.c index 1268c606..affa719d 100644 --- a/router/rtrStem.c +++ b/router/rtrStem.c @@ -173,6 +173,7 @@ RtrStemProcessAll(use, netList, doWarn, func) * they all turned out to be unusable. */ locPrev = locFirst = (NLTermLoc *) NULL; + free_magic1_t mm1 = freeMagic1_init(); for (loc = term->nterm_locs; loc; loc = loc->nloc_next) { if (loc->nloc_chan == (GCRChannel *) NULL) @@ -187,13 +188,14 @@ RtrStemProcessAll(use, netList, doWarn, func) /* Nuke it */ if (locPrev) locPrev->nloc_next = loc->nloc_next; - freeMagic((char *) loc); + freeMagic1(&mm1, (char *) loc); continue; } locPrev = loc; if (locFirst == (NLTermLoc *) NULL) locFirst = loc; } + freeMagic1_end(&mm1); /* Nuke any leading elements */ term->nterm_locs = locFirst; diff --git a/router/rtrVia.c b/router/rtrVia.c index 1d7ec8c4..ec862d00 100644 --- a/router/rtrVia.c +++ b/router/rtrVia.c @@ -386,11 +386,13 @@ rtrViaCheck(area, def) */ DBErase(def, area, RtrContactType); + free_magic1_t mm1 = freeMagic1_init(); for ( pl = rtrPaintList; pl; pl = pl->pl_next) { DBPaint(def, &pl->pl_area, type); - freeMagic( (char *)pl ); + freeMagic1(&mm1, (char *)pl ); } + freeMagic1_end(&mm1); rtrVias++; return; @@ -523,21 +525,29 @@ RtrViaMinimize(def) * Replace poly with metal where appropriate. */ - for ( ap = rtrAreaList; ap; ap = ap->ap_next) { - DBErase(def, &ap->ap_erase, ap->ap_oldtype); - DBPaint(def, &ap->ap_paint, ap->ap_newtype); - freeMagic( (char *)ap); + free_magic1_t mm1 = freeMagic1_init(); + for ( ap = rtrAreaList; ap; ap = ap->ap_next) + { + DBErase(def, &ap->ap_erase, ap->ap_oldtype); + DBPaint(def, &ap->ap_paint, ap->ap_newtype); + freeMagic1(&mm1, (char *)ap); + } + freeMagic1_end(&mm1); } /* * Eliminate unnecessary vias. */ - for ( vp = rtrViaList; vp; vp = vp->vp_next) { - rtrViaCheck(&vp->vp_area, def); - freeMagic( (char *)vp); + free_magic1_t mm1 = freeMagic1_init(); + for ( vp = rtrViaList; vp; vp = vp->vp_next) + { + rtrViaCheck(&vp->vp_area, def); + freeMagic1(&mm1, (char *)vp); + } + freeMagic1_end(&mm1); } /* @@ -558,21 +568,29 @@ RtrViaMinimize(def) * Erase poly and replace with metal. */ - for ( ap = rtrAreaList; ap; ap = ap->ap_next) { - DBErase(def, &ap->ap_erase, ap->ap_oldtype); - DBPaint(def, &ap->ap_paint, ap->ap_newtype); - freeMagic( (char *)ap); + free_magic1_t mm1 = freeMagic1_init(); + for ( ap = rtrAreaList; ap; ap = ap->ap_next) + { + DBErase(def, &ap->ap_erase, ap->ap_oldtype); + DBPaint(def, &ap->ap_paint, ap->ap_newtype); + freeMagic1(&mm1, (char *)ap); + } + freeMagic1_end(&mm1); } /* * Eliminate unnecessary vias. */ - for ( vp = rtrViaList; vp; vp = vp->vp_next) { - rtrViaCheck(&vp->vp_area, def); - freeMagic( (char *)vp); + free_magic1_t mm1 = freeMagic1_init(); + for ( vp = rtrViaList; vp; vp = vp->vp_next) + { + rtrViaCheck(&vp->vp_area, def); + freeMagic1(&mm1, (char *)vp); + } + freeMagic1_end(&mm1); } return rtrVias; diff --git a/select/selEnum.c b/select/selEnum.c index 8cb6e7ec..218f3781 100644 --- a/select/selEnum.c +++ b/select/selEnum.c @@ -259,8 +259,10 @@ selEnumPFunc1(tile, arg) if ((*arg->sea_func)(&rootRect, arg->sea_rectList->r_type, arg->sea_cdarg) != 0) return 1; - freeMagic((char *)arg->sea_rectList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *)arg->sea_rectList); arg->sea_rectList = arg->sea_rectList->r_next; + freeMagic1_end(&mm1); } return 0; } diff --git a/select/selOps.c b/select/selOps.c index ce24d8c4..ee538560 100644 --- a/select/selOps.c +++ b/select/selOps.c @@ -1595,8 +1595,10 @@ SelectStretch(x, y) TTMaskSetOnlyType(&tmask, tloc); DBPaintValid(EditCellUse->cu_def, &selStretchList->sa_area, &tmask, type); - freeMagic((char *) selStretchList); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *) selStretchList); selStretchList = selStretchList->sa_next; + freeMagic1_end(&mm1); } /* Paint the new translated selection back into the edit cell, diff --git a/utils/hash.c b/utils/hash.c index 5f57663c..342f2f57 100644 --- a/utils/hash.c +++ b/utils/hash.c @@ -587,11 +587,12 @@ HashRemove(table, key) bucket = hash(table, key); h = *(table->ht_table + bucket); hlast = NULL; + free_magic1_t mm1 = freeMagic1_init(); while (h != NIL) { if (strcmp(h->h_key.h_name, key) == 0) { - freeMagic((char *)h); + freeMagic1(&mm1, (char *)h); if (hlast != NULL) hlast->h_next = h->h_next; else @@ -601,6 +602,7 @@ HashRemove(table, key) hlast = h; h = h->h_next; } + freeMagic1_end(&mm1); } @@ -690,16 +692,20 @@ HashKill(table) if (table->ht_ptrKeys == HT_CLIENTKEYS) killFn = table->ht_killFn; for (hp = table->ht_table, hend = &hp[table->ht_size]; hp < hend; hp++) + { + free_magic1_t mm1 = freeMagic1_init(); for (h = *hp; h != NIL; h = h->h_next) { const void *p; - freeMagic((char *) h); + freeMagic1(&mm1, (char *) h); if (killFn) { p = h->h_key.h_ptr; (*killFn)((void *)p); } } + freeMagic1_end(&mm1); + } freeMagic((char *) table->ht_table); /* diff --git a/utils/list.c b/utils/list.c index f63c91d9..a79125c9 100644 --- a/utils/list.c +++ b/utils/list.c @@ -98,8 +98,10 @@ void ListDealloc(list) List *list; /* List to free */ { + free_magic1_t mm1 = freeMagic1_init(); for(;list!=NULL; list=LIST_TAIL(list)) - freeMagic((char *) list); + freeMagic1(&mm1, (char *) list); + freeMagic1_end(&mm1); return; } @@ -124,11 +126,13 @@ void ListDeallocC(list) List *list; /* List to free */ { + free_magic1_t mm1 = freeMagic1_init(); for(;list!=NULL; list=LIST_TAIL(list)) { - freeMagic((char *) LIST_FIRST(list)); - freeMagic((char *) list); + freeMagic1(&mm1, (char *) LIST_FIRST(list)); /* can probably use normal free() */ + freeMagic1(&mm1, (char *) list); } + freeMagic1_end(&mm1); return; } diff --git a/utils/netlist.c b/utils/netlist.c index a0d1c593..5195c928 100644 --- a/utils/netlist.c +++ b/utils/netlist.c @@ -268,16 +268,18 @@ NLFree(netList) NLTerm *term; NLNet *net; + free_magic1_t mm1 = freeMagic1_init(); for (net = netList->nnl_nets; net; net = net->nnet_next) { for (term = net->nnet_terms; term; term = term->nterm_next) { for (loc = term->nterm_locs; loc; loc = loc->nloc_next) - freeMagic((char *) loc); - freeMagic((char *) term); + freeMagic1(&mm1, (char *) loc); + freeMagic1(&mm1, (char *) term); } - freeMagic((char *) net); + freeMagic1(&mm1, (char *) net); } + freeMagic1_end(&mm1); HashKill(&netList->nnl_names); } diff --git a/utils/pathvisit.c b/utils/pathvisit.c index 606272e7..bcf3c5d0 100644 --- a/utils/pathvisit.c +++ b/utils/pathvisit.c @@ -83,12 +83,14 @@ PaVisitFree(pv) { PaVisitClient *pvc; + free_magic1_t mm1 = freeMagic1_init(); for (pvc = pv->pv_first; pvc; pvc = pvc->pvc_next) { if (pvc->pvc_keyword) freeMagic(pvc->pvc_keyword); - freeMagic((char *) pvc); + freeMagic1(&mm1, (char *) pvc); } + freeMagic1_end(&mm1); freeMagic((char *) pv); } diff --git a/utils/tech.c b/utils/tech.c index 5b3ce861..13611cb6 100644 --- a/utils/tech.c +++ b/utils/tech.c @@ -760,8 +760,10 @@ skipsection: { fclose(fstack->file); freeMagic(fstack->filename); - freeMagic(fstack); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, fstack); fstack = fstack->next; + freeMagic1_end(&mm1); } if (fstack) fclose(fstack->file); diff --git a/utils/undo.c b/utils/undo.c index 7baa50b5..b4124c5e 100644 --- a/utils/undo.c +++ b/utils/undo.c @@ -244,11 +244,13 @@ UndoInit(logFileName, mode) * Deallocate any events stored in main memory */ - while (undoLogHead != (internalUndoEvent *) NULL) + free_magic1_t mm1 = freeMagic1_init(); + while (undoLogHead != (internalUndoEvent *) NULL) { - freeMagic((char *) undoLogHead); + freeMagic1(&mm1, (char *) undoLogHead); undoLogHead = undoLogHead->iue_forw; } + freeMagic1_end(&mm1); return (TRUE); } @@ -370,12 +372,14 @@ UndoFlush() if (undoLogHead == (internalUndoEvent *) NULL) return; + free_magic1_t mm1 = freeMagic1_init(); while (undoLogTail != undoLogHead) { - freeMagic((char *) undoLogTail); + freeMagic1(&mm1, (char *) undoLogTail); undoLogTail = undoLogTail->iue_back; ASSERT(undoLogTail != (internalUndoEvent *) NULL, "UndoFlush"); } + freeMagic1_end(&mm1); freeMagic((char *) undoLogHead); undoLogHead = undoLogTail = undoLogCur = (internalUndoEvent *) NULL; @@ -813,18 +817,22 @@ undoFreeHead() while (undoNumCommands > LOWCOMMANDS) { + free_magic1_t mm1 = freeMagic1_init(); do { ASSERT(undoLogHead != undoLogCur, "undoFreeHead"); - freeMagic((char *) undoLogHead); + freeMagic1(&mm1, (char *) undoLogHead); undoLogHead = undoLogHead->iue_forw; ASSERT(undoLogHead != (internalUndoEvent *) NULL, "undoFreeHead"); } while (undoLogHead->iue_type != UT_DELIM); + freeMagic1_end(&mm1); undoNumCommands--; } - freeMagic((char *) undoLogHead); + free_magic1_t mm1 = freeMagic1_init(); + freeMagic1(&mm1, (char *) undoLogHead); undoLogHead = undoLogHead->iue_forw; + freeMagic1_end(&mm1); undoLogHead->iue_back = (internalUndoEvent *) NULL; } @@ -864,11 +872,13 @@ undoMemTruncate() * Delete ALL events from memory */ up = undoLogHead; + free_magic1_t mm1 = freeMagic1_init(); while (up != (internalUndoEvent *) NULL) { - freeMagic((char *) up); + freeMagic1(&mm1, (char *) up); up = up->iue_forw; } + freeMagic1_end(&mm1); undoLogTail = undoLogHead = (internalUndoEvent *) NULL; undoNumCommands = 0; } @@ -879,13 +889,15 @@ undoMemTruncate() * Delete only some of the events in main memory. */ up = undoLogCur->iue_forw; + free_magic1_t mm1 = freeMagic1_init(); while (up != (internalUndoEvent *) NULL) { if (up->iue_type == UT_DELIM) undoNumCommands--; - freeMagic((char *) up); + freeMagic1(&mm1, (char *) up); up = up->iue_forw; } + freeMagic1_end(&mm1); undoLogCur->iue_forw = (internalUndoEvent *) NULL; undoLogTail = undoLogCur; } diff --git a/wiring/wireTech.c b/wiring/wireTech.c index bfa73b3d..7e1eaac7 100644 --- a/wiring/wireTech.c +++ b/wiring/wireTech.c @@ -61,11 +61,13 @@ WireTechInit(void) Contact *contact; int i; + free_magic1_t mm1 = freeMagic1_init(); while (WireContacts != NULL) { - freeMagic((char *) WireContacts); + freeMagic1(&mm1, (char *) WireContacts); WireContacts = WireContacts->con_next; } + freeMagic1_end(&mm1); WireUnits = 1; }