aboutsummaryrefslogtreecommitdiff
path: root/gc.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-12 19:37:57 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-12 19:37:57 +0800
commit4d3ed205fc2b86180f81fea388e488f5fa96cef9 (patch)
tree31f8ad22e11da45a439d5aad873ba08a1896be81 /gc.cpp
parent301c949362d243bb6b69956355e0e7ecccc43ce4 (diff)
basic gc
Diffstat (limited to 'gc.cpp')
-rw-r--r--gc.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/gc.cpp b/gc.cpp
index 4a3dd89..a5fdc48 100644
--- a/gc.cpp
+++ b/gc.cpp
@@ -9,15 +9,21 @@ typedef unsigned long long ull;
static EvalObj *gcq[GC_QUEUE_SIZE];
+GarbageCollector::GarbageCollector() {
+ mapping.clear();
+ pend_cnt = 0;
+ pending_list = NULL;
+}
+
GarbageCollector::PendingEntry::PendingEntry(
EvalObj *_obj, PendingEntry *_next) : obj(_obj), next(_next) {}
-void GarbageCollector::expose(EvalObj *ptr) {
+void GarbageCollector::expose(EvalObj *ptr, bool delay) {
bool flag = mapping.count(ptr);
if (flag)
{
- if (!--mapping[ptr])
+ if (!--mapping[ptr] && !delay)
{
#ifdef GC_DEBUG
fprintf(stderr, "GC: 0x%llx pending. \n", (ull)ptr);
@@ -80,4 +86,3 @@ EvalObj *GarbageCollector::attach(EvalObj *ptr) {
return ptr; // passing through
}
-GarbageCollector gc;