示例#1
0
void idris_requireAlloc(VM* vm, size_t size) {
    if (!(vm->heap.next + size < vm->heap.end)) {
        idris_gc(vm);
    }

    int lock = vm->processes > 0;
    if (lock) { // not message passing
       pthread_mutex_lock(&vm->alloc_lock); 
    }
}
示例#2
0
void idris_requireAlloc(VM* vm, size_t size) {
    if (!(vm->heap.next + size < vm->heap.end)) {
        idris_gc(vm);
    }

    int lock = vm->processes > 0;
    if (lock) { // We only need to lock if we're in concurrent mode
       pthread_mutex_lock(&vm->alloc_lock); 
    }
}
示例#3
0
void idris_requireAlloc(size_t size) {
#ifdef HAS_PTHREAD
    VM* vm = pthread_getspecific(vm_key);
#else
    VM* vm = global_vm;
#endif

    if (!(vm->heap.next + size < vm->heap.end)) {
        idris_gc(vm);
    }
#ifdef HAS_PTHREAD
    int lock = vm->processes > 0;
    if (lock) { // We only need to lock if we're in concurrent mode
       pthread_mutex_lock(&vm->alloc_lock);
    }
#endif
}
示例#4
0
void idris_forceGC(void* vm) {
    idris_gc((VM*)vm);
}