48
48
49
49
namespace node {
50
50
51
+ using v8::Context;
51
52
using v8::FunctionCallbackInfo;
52
53
using v8::GCCallbackFlags;
53
54
using v8::GCType;
@@ -262,31 +263,7 @@ void dtrace_gc_done(Isolate* isolate, GCType type, GCCallbackFlags flags) {
262
263
}
263
264
264
265
265
- void InitDTrace (Environment* env, Local<Object> target) {
266
- HandleScope scope (env->isolate ());
267
-
268
- static struct {
269
- const char * name;
270
- void (*func)(const FunctionCallbackInfo<Value>&);
271
- } tab[] = {
272
- #define NODE_PROBE (name ) #name, name
273
- { NODE_PROBE (DTRACE_NET_SERVER_CONNECTION) },
274
- { NODE_PROBE (DTRACE_NET_STREAM_END) },
275
- { NODE_PROBE (DTRACE_HTTP_SERVER_REQUEST) },
276
- { NODE_PROBE (DTRACE_HTTP_SERVER_RESPONSE) },
277
- { NODE_PROBE (DTRACE_HTTP_CLIENT_REQUEST) },
278
- { NODE_PROBE (DTRACE_HTTP_CLIENT_RESPONSE) }
279
- #undef NODE_PROBE
280
- };
281
-
282
- for (size_t i = 0 ; i < arraysize (tab); i++) {
283
- Local<String> key = OneByteString (env->isolate (), tab[i].name );
284
- Local<Value> val = env->NewFunctionTemplate (tab[i].func )
285
- ->GetFunction (env->context ())
286
- .ToLocalChecked ();
287
- target->Set (env->context (), key, val).FromJust ();
288
- }
289
-
266
+ void InitDTrace (Environment* env) {
290
267
#ifdef HAVE_ETW
291
268
// ETW is neither thread-safe nor does it clean up resources on exit,
292
269
// so we can use it only on the main thread.
@@ -295,10 +272,27 @@ void InitDTrace(Environment* env, Local<Object> target) {
295
272
}
296
273
#endif
297
274
298
- #if defined HAVE_DTRACE || defined HAVE_ETW
299
275
env->isolate ()->AddGCPrologueCallback (dtrace_gc_start);
300
276
env->isolate ()->AddGCEpilogueCallback (dtrace_gc_done);
277
+ }
278
+
279
+ void InitializeDTrace (Local<Object> target,
280
+ Local<Value> unused,
281
+ Local<Context> context,
282
+ void * priv) {
283
+ Environment* env = Environment::GetCurrent (context);
284
+
285
+ #if defined HAVE_DTRACE || defined HAVE_ETW
286
+ # define NODE_PROBE (name ) env->SetMethod (target, #name, name);
287
+ NODE_PROBE (DTRACE_NET_SERVER_CONNECTION)
288
+ NODE_PROBE (DTRACE_NET_STREAM_END)
289
+ NODE_PROBE (DTRACE_HTTP_SERVER_REQUEST)
290
+ NODE_PROBE (DTRACE_HTTP_SERVER_RESPONSE)
291
+ NODE_PROBE (DTRACE_HTTP_CLIENT_REQUEST)
292
+ NODE_PROBE (DTRACE_HTTP_CLIENT_RESPONSE)
293
+ # undef NODE_PROBE
301
294
#endif
302
295
}
303
296
304
297
} // namespace node
298
+ NODE_MODULE_CONTEXT_AWARE_INTERNAL (dtrace, node::InitializeDTrace)
0 commit comments