superlock 1.4.11 → 1.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/create.js +12 -5
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "superlock",
3
3
  "description": "The minimal Node.js concurrency toolkit: mutex, semaphore and fair queue for async/await, with no dependencies.",
4
4
  "homepage": "https://superlock.js.org/",
5
- "version": "1.4.11",
5
+ "version": "1.4.13",
6
6
  "types": "src/index.d.ts",
7
7
  "main": "src/index.js",
8
8
  "exports": {
package/src/create.js CHANGED
@@ -5,23 +5,30 @@ const LinkedList = require('./linked-list')
5
5
  module.exports = (slots = 1) => {
6
6
  const queue = new LinkedList()
7
7
 
8
- const release = () => {
8
+ const freeSlot = () => {
9
9
  ++slots
10
10
  const waiter = queue.dequeue()
11
- if (waiter) return waiter.acquire()
11
+ if (waiter) waiter.acquire()
12
12
  }
13
13
 
14
- const ready = Promise.resolve(release)
14
+ const createRelease = () => {
15
+ let released = false
16
+ return () => {
17
+ if (released) return
18
+ released = true
19
+ freeSlot()
20
+ }
21
+ }
15
22
 
16
23
  const acquire = resolve => {
17
24
  --slots
18
- resolve(release)
25
+ resolve(createRelease())
19
26
  }
20
27
 
21
28
  const lock = signal => {
22
29
  if (signal == null && slots !== 0) {
23
30
  --slots
24
- return ready
31
+ return Promise.resolve(createRelease())
25
32
  }
26
33
 
27
34
  return new Promise(resolve => {