Commit ad489775d261feefa61783f6900bc424934cf135

Authored by Adhidarma Hadiwinoto
1 parent 8f7f6a1397
Exists in master

Mutex not locked before message

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

1 const DEBUGMODE = (process.env.NODE_ENV !== 'production') || process.env.DEBUG_MUTEX; 1 const DEBUGMODE = (process.env.NODE_ENV !== 'production') || process.env.DEBUG_MUTEX;
2 2
3 const locks = require('locks'); 3 const locks = require('locks');
4 const logger = require('komodo-sdk/logger'); 4 const logger = require('komodo-sdk/logger');
5 5
6 const locksList = {}; 6 const locksList = {};
7 const lockBy = {}; 7 const lockBy = {};
8 8
9 exports.lock = function lock(lockName, label, cb) { 9 exports.lock = function lock(lockName, label, cb) {
10 if (DEBUGMODE) logger.verbose('Locking MUTEX', { lockName, label }); 10 if (DEBUGMODE) logger.verbose('Locking MUTEX', { lockName, label });
11 return new Promise((resolve) => { 11 return new Promise((resolve) => {
12 if (!locksList[lockName]) { 12 if (!locksList[lockName]) {
13 locksList[lockName] = locks.createMutex(); 13 locksList[lockName] = locks.createMutex();
14 } 14 }
15 15
16 locksList[lockName].lock(() => { 16 locksList[lockName].lock(() => {
17 lockBy[lockName] = label; 17 lockBy[lockName] = label;
18 if (DEBUGMODE) logger.verbose('MUTEX locked', { lockName, label }); 18 if (DEBUGMODE) logger.verbose('MUTEX locked', { lockName, label });
19 resolve(true); 19 resolve(true);
20 if (typeof cb === 'function') cb(); 20 if (typeof cb === 'function') cb();
21 }); 21 });
22 }); 22 });
23 }; 23 };
24 24
25 exports.tryLock = function tryLock(lockName, label) { 25 exports.tryLock = function tryLock(lockName, label) {
26 if (DEBUGMODE) logger.verbose('Trying to enter MUTEX if not locked', { lockName, label }); 26 if (DEBUGMODE) logger.verbose('Trying to enter MUTEX if not locked', { lockName, label });
27 27
28 if (!locksList[lockName]) { 28 if (!locksList[lockName]) {
29 locksList[lockName] = locks.createMutex(); 29 locksList[lockName] = locks.createMutex();
30 } 30 }
31 31
32 const result = locksList[lockName].tryLock(); 32 const result = locksList[lockName].tryLock();
33 if (DEBUGMODE && result) logger.verbose('MUTEX entered', { lockName, label }); 33 if (DEBUGMODE && result) logger.verbose('MUTEX entered', { lockName, label });
34 if (DEBUGMODE && !result) logger.verbose('MUTEX not entered', { lockName, label }); 34 if (DEBUGMODE && !result) logger.verbose('MUTEX not entered', { lockName, label });
35 return result; 35 return result;
36 }; 36 };
37 37
38 38
39 exports.unlock = function unlock(lockName, label) { 39 exports.unlock = function unlock(lockName, label) {
40 if (DEBUGMODE) logger.verbose('Unlocking MUTEX', { lockName, label }); 40 if (DEBUGMODE) logger.verbose('Unlocking MUTEX', { lockName, label });
41 41
42 if (!locksList[lockName]) { 42 if (!locksList[lockName]) {
43 logger.warn('Try to unlock undefined MUTEX', { lockName, label }); 43 logger.warn('Try to unlock undefined MUTEX', { lockName, label });
44 return; 44 return;
45 } 45 }
46 46
47 try { 47 try {
48 if (locksList[lockName]) locksList[lockName].unlock(); 48 if (locksList[lockName]) locksList[lockName].unlock();
49 if (DEBUGMODE) logger.verbose('MUTEX unlocked', { lockName, label }); 49 if (DEBUGMODE) logger.verbose('MUTEX unlocked', { lockName, label });
50 } catch (e) { 50 } catch (e) {
51 logger.warn('Exception on unlocking MUTEX', { lockName, label, e }); 51 logger.warn('Exception on unlocking MUTEX. MUTEX not locked before?', { lockName, label, e });
52 } 52 }
53 }; 53 };
54 54
55 exports.getLockBy = function getLockBy(lockName) { 55 exports.getLockBy = function getLockBy(lockName) {
56 return lockBy[lockName]; 56 return lockBy[lockName];
57 }; 57 };
58 58