@peerbit/react 1.1.10 → 1.1.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"lockstorage.d.ts","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"AAqBA,qBAAa,SAAS;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAEhB,EACX,QAAiB,EACjB,OAA0B,EAC1B,OAA0B,EAC1B,OAAc,EACd,YAA+B,GAC/B;;;;;;KAAK;IAUN,IAAI,CACH,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,OAAO,EAC1B,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GACzC,OAAO,CAAC;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAmHF,QAAQ,CAAC,GAAG,EAAE,MAAM;IAMpB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM9C,OAAO,CAAC,GAAG,EAAE,MAAM;IAcnB;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO;IAiD3D;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAmBxC"}
1
+ {"version":3,"file":"lockstorage.d.ts","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"AAqBA,qBAAa,SAAS;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAEhB,EACX,QAAiB,EACjB,OAA0B,EAC1B,OAA0B,EAC1B,OAAc,EACd,YAA+B,GAC/B;;;;;;KAAK;IAUN,IAAI,CACH,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,OAAO,EAC1B,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GACzC,OAAO,CAAC;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IA4JF,QAAQ,CAAC,GAAG,EAAE,MAAM;IAMpB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM9C,OAAO,CAAC,GAAG,EAAE,MAAM;IAcnB;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO;IAiD3D;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAmBxC"}
@@ -41,7 +41,43 @@ export class FastMutex {
41
41
  let restartCount = 0;
42
42
  let contentionCount = 0;
43
43
  let locksLost = 0;
44
+ let settled = false;
45
+ const pendingRetries = new Set();
46
+ const clearPendingRetries = () => {
47
+ for (const timer of pendingRetries) {
48
+ clearTimeout(timer);
49
+ }
50
+ pendingRetries.clear();
51
+ };
52
+ const resolveOnce = (value) => {
53
+ if (settled)
54
+ return;
55
+ settled = true;
56
+ clearPendingRetries();
57
+ resolve(value);
58
+ };
59
+ const rejectOnce = (error) => {
60
+ if (settled)
61
+ return;
62
+ settled = true;
63
+ clearPendingRetries();
64
+ reject(error);
65
+ };
66
+ const scheduleRetry = (fn, ms) => {
67
+ if (settled)
68
+ return;
69
+ const timer = setTimeout(() => {
70
+ pendingRetries.delete(timer);
71
+ if (!settled) {
72
+ fn();
73
+ }
74
+ }, ms);
75
+ pendingRetries.add(timer);
76
+ };
44
77
  const acquireLock = (key) => {
78
+ if (settled) {
79
+ return;
80
+ }
45
81
  // If the option is set and the same client already holds both keys,
46
82
  // update the expiry and resolve immediately.
47
83
  if (options?.replaceIfSameClient) {
@@ -52,7 +88,7 @@ export class FastMutex {
52
88
  this.setItem(x, this.clientId, keepLocked);
53
89
  this.setItem(y, this.clientId, keepLocked);
54
90
  debug('FastMutex client "%s" replaced its own lock on "%s".', this.clientId, key);
55
- return resolve({
91
+ return resolveOnce({
56
92
  restartCount,
57
93
  contentionCount,
58
94
  locksLost,
@@ -61,12 +97,12 @@ export class FastMutex {
61
97
  }
62
98
  // Check for overall retries/timeouts.
63
99
  if (restartCount > 1000 || contentionCount > 1000 || locksLost > 1000) {
64
- return reject("Failed to resolve lock");
100
+ return rejectOnce("Failed to resolve lock");
65
101
  }
66
102
  const elapsedTime = Date.now() - acquireStart;
67
103
  if (elapsedTime >= this.timeout) {
68
104
  debug('Lock on "%s" could not be acquired within %sms by FastMutex client "%s"', key, this.timeout, this.clientId);
69
- return reject(new Error(`Lock could not be acquired within ${this.timeout}ms`));
105
+ return rejectOnce(new Error(`Lock could not be acquired within ${this.timeout}ms`));
70
106
  }
71
107
  // First, set key X.
72
108
  this.setItem(x, this.clientId, keepLocked);
@@ -75,7 +111,7 @@ export class FastMutex {
75
111
  if (lsY) {
76
112
  debug("Lock exists on Y (%s), restarting...", lsY);
77
113
  restartCount++;
78
- setTimeout(() => acquireLock(key), 10);
114
+ scheduleRetry(() => acquireLock(key), 10);
79
115
  return;
80
116
  }
81
117
  // Request the inner lock by setting Y.
@@ -85,11 +121,11 @@ export class FastMutex {
85
121
  if (lsX !== this.clientId) {
86
122
  contentionCount++;
87
123
  debug('Lock contention detected. X="%s"', lsX);
88
- setTimeout(() => {
124
+ scheduleRetry(() => {
89
125
  lsY = this.getItem(y);
90
126
  if (lsY === this.clientId) {
91
127
  debug('FastMutex client "%s" won the lock contention on "%s"', this.clientId, key);
92
- resolve({
128
+ resolveOnce({
93
129
  restartCount,
94
130
  contentionCount,
95
131
  locksLost,
@@ -99,14 +135,14 @@ export class FastMutex {
99
135
  restartCount++;
100
136
  locksLost++;
101
137
  debug('FastMutex client "%s" lost the lock contention on "%s" to another process (%s). Restarting...', this.clientId, key, lsY);
102
- setTimeout(() => acquireLock(key), 10);
138
+ scheduleRetry(() => acquireLock(key), 10);
103
139
  }
104
140
  }, 50);
105
141
  return;
106
142
  }
107
143
  // No contention: lock is acquired.
108
144
  debug('FastMutex client "%s" acquired a lock on "%s" with no contention', this.clientId, key);
109
- resolve({ restartCount, contentionCount, locksLost });
145
+ resolveOnce({ restartCount, contentionCount, locksLost });
110
146
  };
111
147
  acquireLock(key);
112
148
  });
@@ -1 +1 @@
1
- {"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/react",
3
- "version": "1.1.10",
3
+ "version": "1.1.11",
4
4
  "description": "React bindings for Peerbit clients",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -54,13 +54,13 @@
54
54
  "detectincognitojs": "^1.6.1",
55
55
  "libsodium-wrappers": "0.7.15",
56
56
  "uuid": "^10.0.0",
57
- "@peerbit/indexer-interface": "3.0.3",
58
- "@peerbit/canonical-client": "1.1.21",
59
- "@peerbit/program": "6.0.18",
60
57
  "@peerbit/crypto": "3.1.1",
58
+ "@peerbit/canonical-client": "1.1.22",
61
59
  "@peerbit/logger": "2.0.1",
62
- "@peerbit/program-react": "0.4.21",
63
- "peerbit": "5.2.7"
60
+ "@peerbit/program": "6.0.19",
61
+ "@peerbit/indexer-interface": "3.0.3",
62
+ "@peerbit/program-react": "0.4.22",
63
+ "peerbit": "5.2.8"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@testing-library/dom": "^10.4.0",
@@ -64,8 +64,49 @@ export class FastMutex {
64
64
  let restartCount = 0;
65
65
  let contentionCount = 0;
66
66
  let locksLost = 0;
67
+ let settled = false;
68
+ const pendingRetries = new Set<ReturnType<typeof setTimeout>>();
69
+
70
+ const clearPendingRetries = () => {
71
+ for (const timer of pendingRetries) {
72
+ clearTimeout(timer);
73
+ }
74
+ pendingRetries.clear();
75
+ };
76
+
77
+ const resolveOnce = (value: {
78
+ restartCount: number;
79
+ contentionCount: number;
80
+ locksLost: number;
81
+ }) => {
82
+ if (settled) return;
83
+ settled = true;
84
+ clearPendingRetries();
85
+ resolve(value);
86
+ };
87
+
88
+ const rejectOnce = (error: unknown) => {
89
+ if (settled) return;
90
+ settled = true;
91
+ clearPendingRetries();
92
+ reject(error);
93
+ };
94
+
95
+ const scheduleRetry = (fn: () => void, ms: number) => {
96
+ if (settled) return;
97
+ const timer = setTimeout(() => {
98
+ pendingRetries.delete(timer);
99
+ if (!settled) {
100
+ fn();
101
+ }
102
+ }, ms);
103
+ pendingRetries.add(timer);
104
+ };
67
105
 
68
106
  const acquireLock = (key: string) => {
107
+ if (settled) {
108
+ return;
109
+ }
69
110
  // If the option is set and the same client already holds both keys,
70
111
  // update the expiry and resolve immediately.
71
112
  if (options?.replaceIfSameClient) {
@@ -80,7 +121,7 @@ export class FastMutex {
80
121
  this.clientId,
81
122
  key,
82
123
  );
83
- return resolve({
124
+ return resolveOnce({
84
125
  restartCount,
85
126
  contentionCount,
86
127
  locksLost,
@@ -90,7 +131,7 @@ export class FastMutex {
90
131
 
91
132
  // Check for overall retries/timeouts.
92
133
  if (restartCount > 1000 || contentionCount > 1000 || locksLost > 1000) {
93
- return reject("Failed to resolve lock");
134
+ return rejectOnce("Failed to resolve lock");
94
135
  }
95
136
  const elapsedTime = Date.now() - acquireStart;
96
137
  if (elapsedTime >= this.timeout) {
@@ -100,7 +141,7 @@ export class FastMutex {
100
141
  this.timeout,
101
142
  this.clientId,
102
143
  );
103
- return reject(
144
+ return rejectOnce(
104
145
  new Error(`Lock could not be acquired within ${this.timeout}ms`),
105
146
  );
106
147
  }
@@ -113,7 +154,7 @@ export class FastMutex {
113
154
  if (lsY) {
114
155
  debug("Lock exists on Y (%s), restarting...", lsY);
115
156
  restartCount++;
116
- setTimeout(() => acquireLock(key), 10);
157
+ scheduleRetry(() => acquireLock(key), 10);
117
158
  return;
118
159
  }
119
160
 
@@ -125,7 +166,7 @@ export class FastMutex {
125
166
  if (lsX !== this.clientId) {
126
167
  contentionCount++;
127
168
  debug('Lock contention detected. X="%s"', lsX);
128
- setTimeout(() => {
169
+ scheduleRetry(() => {
129
170
  lsY = this.getItem(y);
130
171
  if (lsY === this.clientId) {
131
172
  debug(
@@ -133,7 +174,7 @@ export class FastMutex {
133
174
  this.clientId,
134
175
  key,
135
176
  );
136
- resolve({
177
+ resolveOnce({
137
178
  restartCount,
138
179
  contentionCount,
139
180
  locksLost,
@@ -147,7 +188,7 @@ export class FastMutex {
147
188
  key,
148
189
  lsY,
149
190
  );
150
- setTimeout(() => acquireLock(key), 10);
191
+ scheduleRetry(() => acquireLock(key), 10);
151
192
  }
152
193
  }, 50);
153
194
  return;
@@ -159,7 +200,7 @@ export class FastMutex {
159
200
  this.clientId,
160
201
  key,
161
202
  );
162
- resolve({ restartCount, contentionCount, locksLost });
203
+ resolveOnce({ restartCount, contentionCount, locksLost });
163
204
  };
164
205
 
165
206
  acquireLock(key);