34 using v8::FunctionCallbackInfo;
35 using v8::FunctionTemplate;
36 using v8::HandleScope;
45 class SignalWrap :
public HandleWrap {
49 Local<Context> context) {
50 Environment* env = Environment::GetCurrent(context);
51 Local<FunctionTemplate> constructor = env->NewFunctionTemplate(
New);
52 constructor->InstanceTemplate()->SetInternalFieldCount(1);
53 Local<String> signalString =
54 FIXED_ONE_BYTE_STRING(env->isolate(),
"Signal");
55 constructor->SetClassName(signalString);
57 AsyncWrap::AddWrapMethods(env, constructor);
58 env->SetProtoMethod(constructor,
"close", HandleWrap::Close);
59 env->SetProtoMethod(constructor,
"ref", HandleWrap::Ref);
60 env->SetProtoMethod(constructor,
"unref", HandleWrap::Unref);
61 env->SetProtoMethod(constructor,
"hasRef", HandleWrap::HasRef);
62 env->SetProtoMethod(constructor,
"start",
Start);
63 env->SetProtoMethod(constructor,
"stop", Stop);
65 target->Set(signalString, constructor->GetFunction());
68 size_t self_size()
const override {
return sizeof(*this); }
71 static void New(
const FunctionCallbackInfo<Value>& args) {
75 CHECK(args.IsConstructCall());
76 Environment* env = Environment::GetCurrent(args);
77 new SignalWrap(env, args.This());
80 SignalWrap(Environment* env, Local<Object>
object)
83 reinterpret_cast<uv_handle_t*>(&handle_),
84 AsyncWrap::PROVIDER_SIGNALWRAP) {
85 int r = uv_signal_init(env->event_loop(), &handle_);
89 static void Start(
const FunctionCallbackInfo<Value>& args) {
91 ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder());
92 int signum = args[0]->Int32Value();
93 #if defined(__POSIX__) && HAVE_INSPECTOR 94 if (signum == SIGPROF) {
95 Environment* env = Environment::GetCurrent(args);
96 if (env->inspector_agent()->IsStarted()) {
98 "process.on(SIGPROF) is reserved while debugging");
103 int err = uv_signal_start(&wrap->handle_, OnSignal, signum);
104 args.GetReturnValue().Set(err);
107 static void Stop(
const FunctionCallbackInfo<Value>& args) {
109 ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder());
110 int err = uv_signal_stop(&wrap->handle_);
111 args.GetReturnValue().Set(err);
114 static void OnSignal(uv_signal_t* handle,
int signum) {
115 SignalWrap* wrap = ContainerOf(&SignalWrap::handle_, handle);
116 Environment* env = wrap->env();
117 HandleScope handle_scope(env->isolate());
118 Context::Scope context_scope(env->context());
120 Local<Value> arg =
Integer::New(env->isolate(), signum);
121 wrap->MakeCallback(env->onsignal_string(), 1, &arg);
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, node::inspector::Agent::InitInspector)
void ProcessEmitWarning(Environment *env, const char *fmt,...)
void Initialize(Local< Object > target, Local< Value > unused, Local< Context > context, void *priv)
MaybeLocal< Object > New(Isolate *isolate, Local< String > string, enum encoding enc)
int Start(Isolate *isolate, IsolateData *isolate_data, int argc, const char *const *argv, int exec_argc, const char *const *exec_argv)