aboutsummaryrefslogtreecommitdiff
path: root/gc.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-15 20:25:37 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-15 20:25:37 +0800
commit8ac9aa9f90b608421098efb563a065f8787dbd6f (patch)
tree3bf018777a3c49ff7138294fdff5d6bd3325c69d /gc.cpp
parent9b1d0e016822509e5d3ea7bdc6341b4533b42080 (diff)
remove unnecessary std::set in gcgc_imp
Diffstat (limited to 'gc.cpp')
-rw-r--r--gc.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/gc.cpp b/gc.cpp
index c240192..0e4fc3d 100644
--- a/gc.cpp
+++ b/gc.cpp
@@ -110,7 +110,6 @@ EvalObj *GarbageCollector::attach(EvalObj *ptr) {
}
void GarbageCollector::cycle_resolve() {
- EvalObjSet visited;
Container **clptr = cyc_list;
for (ObjEntry *i = joined->next; i != oe_null; i = i->next)
{
@@ -126,17 +125,16 @@ void GarbageCollector::cycle_resolve() {
EvalObj **l = gcq, **r = l;
for (Container **p = cyc_list; p < clptr; p++)
(*p)->gc_decrement();
+
for (Container **p = cyc_list; p < clptr; p++)
- if ((*p)->gc_refs)
- {
+ if ((*p)->gc_refs) // must not be recycled
*r++ = *p;
- visited.insert(*p);
- }
+
for (; l != r; l++)
{
Container *p = static_cast<Container*>(*l);
p->keep = true;
- p->gc_trigger(r, visited);
+ p->gc_trigger(r);
}
for (Container **p = cyc_list; p < clptr; p++)
if (!(*p)->keep)