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:
parent
801a4ea7be
commit
82bcbbb62c
5 changed files with 56 additions and 0 deletions
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
41
ext/v8/v8_locker.cpp
Normal 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
6
ext/v8/v8_locker.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
#ifndef _RUBY_V8_LOCKER
|
||||
#define _RUBY_V8_LOCKER
|
||||
|
||||
void rr_init_v8_locker();
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue