1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00

Add low-level C interface for v8::Locker and v8::Unlocker

This commit is contained in:
Charles Lowell 2010-08-06 10:24:01 -05:00
parent 801a4ea7be
commit 82bcbbb62c
5 changed files with 56 additions and 0 deletions

View file

@ -19,6 +19,12 @@ VALUE rr_define_class(const char *name, VALUE superclass) {
return klass;
}
VALUE rr_define_module(const char *name) {
VALUE V8 = rb_define_module("V8");
VALUE V8_C = rb_define_module_under(V8, "C");
return rb_define_module_under(V8_C, name);
}
VALUE rr_define_const(const char *name, VALUE value) {
VALUE V8 = rb_define_module("V8");
VALUE V8_C = rb_define_module_under(V8, "C");

View file

@ -8,6 +8,7 @@
#define rr_define_singleton_method(object, name, impl, argc) rb_define_singleton_method(object, name, (VALUE(*)(...))impl, argc)
VALUE rr_define_class(const char *name, VALUE superclass = rb_cObject);
VALUE rr_define_module(const char *name);
VALUE rr_define_const(const char *name, VALUE value);
VALUE rr_v82rb(v8::Handle<v8::Value> value);

View file

@ -12,6 +12,7 @@
#include "v8_callbacks.h"
#include "v8_external.h"
#include "v8_exception.h"
#include "v8_locker.h"
#include <stdio.h>
@ -35,5 +36,6 @@ extern "C" {
rr_init_v8_callbacks();
rr_init_v8_external();
rr_init_v8_exception();
rr_init_v8_locker();
}
}

41
ext/v8/v8_locker.cpp Normal file
View file

@ -0,0 +1,41 @@
#include "rr.h"
#include "v8_locker.h"
using namespace v8;
namespace {
VALUE Lock(VALUE self) {
Locker locker;
return rb_yield(Qnil);
}
VALUE Unlock(VALUE self) {
Unlocker unlocker;
return rb_yield(Qnil);
}
VALUE StartPreemption(VALUE self, VALUE thread_id) {
Locker::StartPreemption(NUM2INT(rb_to_int(thread_id)));
return Qnil;
}
VALUE StopPreemption(VALUE self) {
Locker::StopPreemption();
return Qnil;
}
VALUE IsLocked(VALUE self) {
return rr_v82rb(Locker::IsLocked());
}
VALUE IsActive(VALUE self) {
return rr_v82rb(Locker::IsActive());
}
}
void rr_init_v8_locker() {
VALUE V8 = rb_define_module("V8");
VALUE V8_C = rb_define_module_under(V8, "C");
VALUE LockerModule = rb_define_module_under(V8_C, "Locker");
rr_define_singleton_method(V8_C, "Locker", Lock, 0);
rr_define_singleton_method(V8_C, "Unlocker", Unlock, 0);
rr_define_singleton_method(LockerModule, "StartPreemption", StartPreemption, 1);
rr_define_singleton_method(LockerModule, "StopPreemption", StopPreemption, 0);
rr_define_singleton_method(LockerModule, "IsLocked", IsLocked, 0);
rr_define_singleton_method(LockerModule, "IsActive", IsActive, 0);
}

6
ext/v8/v8_locker.h Normal file
View file

@ -0,0 +1,6 @@
#ifndef _RUBY_V8_LOCKER
#define _RUBY_V8_LOCKER
void rr_init_v8_locker();
#endif