Welcome to mirror list, hosted at ThFree Co, Russian Federation.

watchdog.js « internal « lib - github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 6a5b772111f4d6323f0f51bec4783aab57763806 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'use strict';

const {
  TraceSigintWatchdog
} = internalBinding('watchdog');

class SigintWatchdog extends TraceSigintWatchdog {
  _started = false;
  _effective = false;
  _onNewListener = (eve) => {
    if (eve === 'SIGINT' && this._effective) {
      super.stop();
      this._effective = false;
    }
  };
  _onRemoveListener = (eve) => {
    if (eve === 'SIGINT' && process.listenerCount('SIGINT') === 0 &&
        !this._effective) {
      super.start();
      this._effective = true;
    }
  }

  start() {
    if (this._started) {
      return;
    }
    this._started = true;
    // Prepend sigint newListener to remove stop watchdog before signal wrap
    // been activated. Also make sigint removeListener been ran after signal
    // wrap been stopped.
    process.prependListener('newListener', this._onNewListener);
    process.addListener('removeListener', this._onRemoveListener);

    if (process.listenerCount('SIGINT') === 0) {
      super.start();
      this._effective = true;
    }
  }

  stop() {
    if (!this._started) {
      return;
    }
    this._started = false;
    process.removeListener('newListener', this._onNewListener);
    process.removeListener('removeListener', this._onRemoveListener);

    if (this._effective) {
      super.stop();
      this._effective = false;
    }
  }
}


module.exports = {
  SigintWatchdog
};