22 #ifndef SRC_NODE_WATCHDOG_H_ 23 #define SRC_NODE_WATCHDOG_H_ 25 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 40 explicit Watchdog(v8::Isolate* isolate,
42 bool* timed_out =
nullptr);
44 v8::Isolate* isolate() {
return isolate_; }
47 static void Run(
void* arg);
48 static void Async(uv_async_t* async);
49 static void Timer(uv_timer_t* timer);
51 v8::Isolate* isolate_;
59 class SigintWatchdog {
61 explicit SigintWatchdog(v8::Isolate* isolate,
62 bool* received_signal =
nullptr);
64 v8::Isolate* isolate() {
return isolate_; }
68 v8::Isolate* isolate_;
69 bool* received_signal_;
72 class SigintWatchdogHelper {
74 static SigintWatchdogHelper* GetInstance() {
return &instance; }
75 void Register(SigintWatchdog* watchdog);
76 void Unregister(SigintWatchdog* watchdog);
77 bool HasPendingSignal();
83 SigintWatchdogHelper();
84 ~SigintWatchdogHelper();
86 static bool InformWatchdogsAboutSignal();
87 static SigintWatchdogHelper instance;
89 int start_stop_count_;
93 std::vector<SigintWatchdog*> watchdogs_;
94 bool has_pending_signal_;
99 bool has_running_thread_;
102 static void* RunSigintWatchdog(
void* arg);
103 static void HandleSignal(
int signum);
105 bool watchdog_disabled_;
106 static BOOL WINAPI WinCtrlCHandlerRoutine(DWORD dwCtrlType);
112 #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 114 #endif // SRC_NODE_WATCHDOG_H_ MutexBase< LibuvMutexTraits > Mutex
int Start(Isolate *isolate, IsolateData *isolate_data, int argc, const char *const *argv, int exec_argc, const char *const *exec_argv)