Blame view

lib/mutex.js 2.11 KB
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
1
  'use strict';
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
2
  const DEBUGMODE = process.env.NODE_ENV !== 'production';
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
3
  const locks = require('locks');
c50a62000   Adhidarma Hadiwinoto   Verbose on lock
4
  const logger = require('komodo-sdk/logger');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
5
6
7
  
  const mutexWaitForOK = locks.createMutex();
  const mutexCommand = locks.createMutex();
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
8
  const mutexSubCommand = locks.createMutex();
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
9
  function setLockWaitForOK() {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
10
      if (DEBUGMODE) logger.verbose('Entering MUTEX OK');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
11
12
      return new Promise((resolve) => {
          mutexWaitForOK.lock(() => {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
13
              if (DEBUGMODE) logger.verbose('MUTEX OK entered');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
14
15
16
17
18
19
20
              resolve(true);
          });
      });
  }
  
  function releaseLockWaitForOK() {
      try {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
21
          if (DEBUGMODE) logger.verbose('Leaving MUTEX OK');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
22
23
24
25
26
27
28
          mutexWaitForOK.unlock();
      } catch (e) {
          //
      }
  }
  
  function setLockWaitForCommand() {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
29
      if (DEBUGMODE) logger.verbose('Entering MUTEX Command');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
30
31
      return new Promise((resolve) => {
          mutexCommand.lock(() => {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
32
              if (DEBUGMODE) logger.verbose('MUTEX Command entered');
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
33
34
35
36
              resolve(true);
          });
      });
  }
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
37
38
39
  function tryLockWaitForCommand() {
      return mutexCommand.tryLock();
  }
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
40
  function releaseLockWaitForCommand() {
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
41
      try {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
42
          if (DEBUGMODE) logger.verbose('Leaving MUTEX Command');
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
43
44
45
46
47
48
49
          mutexCommand.unlock();
      } catch (e) {
          //
      }
  }
  
  function setLockWaitForSubCommand() {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
50
      if (DEBUGMODE) logger.verbose('Entering MUTEX SUBCOMMAND');
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
51
52
      return new Promise((resolve) => {
          mutexSubCommand.lock(() => {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
53
              if (DEBUGMODE) logger.verbose('MUTEX SUBCOMMAND entered');
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
54
55
56
57
58
59
              resolve(true);
          });
      });
  }
  
  function releaseLockWaitForSubCommand() {
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
60
      try {
954a3dfb3   Adhidarma Hadiwinoto   Hapus debug log p...
61
          if (DEBUGMODE) logger.verbose('Leaving MUTEX SUBCOMMAND');
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
62
63
64
65
          mutexSubCommand.unlock();
      } catch (e) {
          //
      }
cba7eef40   Adhidarma Hadiwinoto   Separate locks fu...
66
67
68
69
70
71
72
  }
  
  exports.setLockWaitForOK = setLockWaitForOK;
  exports.releaseLockWaitForOK = releaseLockWaitForOK;
  
  exports.setLockWaitForCommand = setLockWaitForCommand;
  exports.releaseLockWaitForCommand = releaseLockWaitForCommand;
0bdac2f9c   Adhidarma Hadiwinoto   Bersih kirim sms ...
73
74
75
76
  exports.tryLockWaitForCommand = tryLockWaitForCommand;
  
  exports.setLockWaitForSubCommand = setLockWaitForSubCommand;
  exports.releaseLockWaitForSubCommand = releaseLockWaitForSubCommand;