diff options
author | Teddy <ted.sybil@gmail.com> | 2013-08-15 13:53:59 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2013-08-15 13:53:59 +0800 |
commit | 8aeb7f59e1da79411c02d1c502d4e7331733e2a0 (patch) | |
tree | 3e1013a0b3875870d73b232d867a7fba1bad97e0 /gc.h | |
parent | 56689aa5d8d337148fcebf672ded423b7411bdfe (diff) |
...
Diffstat (limited to 'gc.h')
-rw-r--r-- | gc.h | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -44,6 +44,13 @@ extern GarbageCollector gc; gc.collect(); \ } while (0) +struct ObjEntry { + EvalObj *obj; + size_t gc_cnt; + ObjEntry *prev, *next; + ObjEntry(ObjEntry *prev, ObjEntry *next); +}; + class GarbageCollector { struct PendingEntry { @@ -52,18 +59,20 @@ class GarbageCollector { PendingEntry(EvalObj *obj, PendingEntry *next); }; - EvalObjSet joined; + ObjEntry *joined; PendingEntry *pending_list; size_t resolve_threshold; + size_t joined_size; public: + GarbageCollector(); void collect(); void cycle_resolve(); void force(); void expose(EvalObj *ptr); void set_resolve_threshold(size_t new_thres); - void join(EvalObj *ptr); + ObjEntry *join(EvalObj *ptr); void quit(EvalObj *ptr); size_t get_remaining(); EvalObj *attach(EvalObj *ptr); |