MCPcopy Create free account
hub / github.com/CapSoftware/Cap / advanceReadIndexCAS

Function advanceReadIndexCAS

apps/desktop/src/utils/shared-frame-buffer.ts:250–278  ·  view source on GitHub ↗
(
	controlView: Uint32Array,
	readIdx: number,
	nextIdx: number,
)

Source from the content-addressed store, hash-verified

248}
249
250function advanceReadIndexCAS(
251 controlView: Uint32Array,
252 readIdx: number,
253 nextIdx: number,
254): void {
255 const MAX_ADVANCE_RETRIES = 16;
256 let expectedIdx = readIdx;
257
258 for (let attempt = 0; attempt < MAX_ADVANCE_RETRIES; attempt++) {
259 const exchanged = Atomics.compareExchange(
260 controlView,
261 CONTROL_READ_INDEX,
262 expectedIdx,
263 nextIdx,
264 );
265 if (exchanged === expectedIdx) {
266 return;
267 }
268 const currentIdx = Atomics.load(controlView, CONTROL_READ_INDEX);
269 const hasProgressed =
270 currentIdx !== readIdx &&
271 ((nextIdx > readIdx && (currentIdx >= nextIdx || currentIdx < readIdx)) ||
272 (nextIdx < readIdx && currentIdx >= nextIdx && currentIdx < readIdx));
273 if (hasProgressed) {
274 return;
275 }
276 expectedIdx = exchanged;
277 }
278}
279
280export function createConsumer(buffer: SharedArrayBuffer): Consumer {
281 const controlView = new Uint32Array(buffer, 0, 8);

Callers 4

readFunction · 0.85
readIntoFunction · 0.85
borrowFunction · 0.85
releaseFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected