예제 #1
0
파일: gc.c 프로젝트: prototype/MacRuby
void
Init_PreGC(void)
{
    auto_collection_control_t *control;

    __auto_zone = auto_zone();
    
    if (__auto_zone == NULL) {
	rb_objc_no_gc_error();
    }

    __nsobject = (void *)objc_getClass("NSObject");

    control = auto_collection_parameters(__auto_zone);
    if (getenv("GC_DEBUG")) {
	control->log = AUTO_LOG_COLLECTIONS | AUTO_LOG_REGIONS | AUTO_LOG_UNUSUAL;
    }
    if (getenv("GC_DISABLE")) {
	gc_disabled = true;
    }

    Method m = class_getInstanceMethod((Class)objc_getClass("NSObject"), sel_registerName("finalize"));
    assert(m != NULL);
    method_setImplementation(m, (IMP)rb_obj_imp_finalize);

    auto_collector_disable(__auto_zone);
}
예제 #2
0
파일: gc.c 프로젝트: 1nueve/MacRuby
void
Init_PreGC(void)
{
    auto_collection_control_t *control;

#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
    __auto_zone = objc_collectableZone();
#else
    __auto_zone = auto_zone();
#endif
    
    if (__auto_zone == NULL) {
	rb_objc_no_gc_error();
    }

    __nsobject = (void *)objc_getClass("NSObject");

    control = auto_collection_parameters(__auto_zone);
    if (getenv("GC_DEBUG")) {
	control->log = AUTO_LOG_COLLECTIONS | AUTO_LOG_REGIONS | AUTO_LOG_UNUSUAL;
    }
    if (getenv("GC_DISABLE")) {
	gc_disabled = true;
	auto_collector_disable(__auto_zone);
    }
}
static void
init_gc_zone(void)
{
    auto_collection_control_t *control;
    
    gc_zone = auto_zone_create("sample collected zone");
    
    control = auto_collection_parameters(gc_zone);
    //control->invalidate = invalidate;
    //control->should_collect = rb_gc_auto_should_collect;   
    //control->ask_should_collect_frequency = -1;
    control->batch_invalidate = batch_invalidate;
    control->disable_generational = 1;
    control->log = AUTO_LOG_ALL;

    auto_zone_register_thread(gc_zone);

    //auto_collector_disable(gc_zone);
}