explicit Quota(size_t limit) : _limit(limit), _used(0) {}
bool alloc(size_t s)
{
- if (_limit && (s > _limit || _used > _limit - s))
+ if (_limit && (s > _limit))
return false;
+ if (_limit && (_used > _limit - s))
+ {
+ GC_gcollect_and_unmap();
+ if (_used > _limit - s)
+ return false;
+ }
+
_used += s;
- // printf("Q: alloc(%zx) -> %zx\n", s, _used);
+ //printf("Q: alloc(%zx) -> %zx\n", s, _used);
return true;
}