@@ -236,7 +236,6 @@ class ArnoldiDelayCalc : public LumpedCapDelayCalc
236236 int pin_n_;
237237 ArnoldiReduce *reduce_;
238238 delay_work *delay_work_;
239- std::vector<rcmodel*> unsaved_parasitics_;
240239};
241240
242241ArcDelayCalc *
@@ -247,6 +246,7 @@ makeArnoldiDelayCalc(StaState *sta)
247246
248247ArnoldiDelayCalc::ArnoldiDelayCalc (StaState *sta) :
249248 LumpedCapDelayCalc (sta),
249+ rcmodel_ (nullptr ),
250250 reduce_ (new ArnoldiReduce(sta)),
251251 delay_work_ (delay_work_create())
252252{
@@ -267,6 +267,7 @@ ArnoldiDelayCalc::~ArnoldiDelayCalc()
267267 free (_delayV);
268268 free (_slewV);
269269 delete reduce_;
270+ delete rcmodel_;
270271}
271272
272273Parasitic *
@@ -297,12 +298,11 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
297298 }
298299
299300 if (parasitic_network) {
300- rcmodel *rcmodel = reduce_->reduceToArnoldi (parasitic_network, drvr_pin,
301- parasitics->couplingCapFactor (),
302- drvr_rf, scene, min_max);
301+ rcmodel_ = reduce_->reduceToArnoldi (parasitic_network, drvr_pin,
302+ parasitics->couplingCapFactor (),
303+ drvr_rf, scene, min_max);
303304 // Arnoldi parasitics are their own class that are not saved in the parasitic db.
304- unsaved_parasitics_.push_back (rcmodel);
305- parasitic = rcmodel;
305+ parasitic = rcmodel_;
306306 }
307307 return parasitic;
308308}
@@ -321,9 +321,8 @@ ArnoldiDelayCalc::reduceParasitic(const Parasitic *,
321321void
322322ArnoldiDelayCalc::finishDrvrPin ()
323323{
324- for (auto parasitic : unsaved_parasitics_)
325- delete parasitic;
326- unsaved_parasitics_.clear ();
324+ delete rcmodel_;
325+ rcmodel_ = nullptr ;
327326}
328327
329328ArcDcalcResult
0 commit comments