All files / lib/internal watchdog.js

76.27% Statements 45/59
87.5% Branches 7/8
80% Functions 4/5
76.27% Lines 45/59

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 603x 3x 3x 3x 3x 3x 3x 3x 2x 2x 7x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 3x 3x 2x     2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x                         3x 3x 3x 3x 3x 3x  
'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
};