void factor_vm::delete_contexts()
{
assert(!ctx);
- std::vector<context *>::const_iterator iter = unused_contexts.begin();
- std::vector<context *>::const_iterator end = unused_contexts.end();
+ std::list<context *>::const_iterator iter = unused_contexts.begin();
+ std::list<context *>::const_iterator end = unused_contexts.end();
while(iter != end)
{
delete *iter;
{
unused_contexts.push_back(old_context);
active_contexts.erase(old_context);
+
+ while(unused_contexts.size() > 10)
+ {
+ context *stale_context = unused_contexts.front();
+ unused_contexts.pop_front();
+ delete stale_context;
+ }
}
VM_C_API void delete_context(factor_vm *parent, context *old_context)
int callback_id;
/* Pooling unused contexts to make context allocation cheaper */
- std::vector<context *> unused_contexts;
+ std::list<context *> unused_contexts;
/* Active contexts, for tracing by the GC */
std::set<context *> active_contexts;