Suppress internal stream release rejections

This commit is contained in:
Basilisk-Dev 2026-05-08 19:20:29 -04:00 • committed by wuggy
commit c7f575cdbe

View file

@ -5965,6 +5965,24 @@ js::InitStreamExtras(JSContext* cx, HandleObject global)
return Promise.reject(error); return Promise.reject(error);
} }
function silenceRejection(promise) {
try {
if (promise && typeof promise.catch === "function")
promise.catch(function() {});
} catch (e) {}
}
function releaseReaderLock(reader) {
try { silenceRejection(reader.closed); } catch (e) {}
try { reader.releaseLock(); } catch (e) {}
}
function releaseWriterLock(writer) {
try { silenceRejection(writer.closed); } catch (e) {}
try { silenceRejection(writer.ready); } catch (e) {}
try { writer.releaseLock(); } catch (e) {}
}
function syncWritableWriterWithStream(writer, state) { function syncWritableWriterWithStream(writer, state) {
var ws = writerState.get(writer); var ws = writerState.get(writer);
if (!ws || ws.stream === undefined) if (!ws || ws.stream === undefined)
@ -6530,8 +6548,8 @@ js::InitStreamExtras(JSContext* cx, HandleObject global)
if (closed) if (closed)
return; return;
closed = true; closed = true;
try { reader.releaseLock(); } catch (e) {} releaseReaderLock(reader);
try { writer.releaseLock(); } catch (e) {} releaseWriterLock(writer);
if (signal && signal.removeEventListener) if (signal && signal.removeEventListener)
signal.removeEventListener("abort", onAbort); signal.removeEventListener("abort", onAbort);
} }
@ -6704,12 +6722,12 @@ js::InitStreamExtras(JSContext* cx, HandleObject global)
return this._reader.read().then(function(result) { return this._reader.read().then(function(result) {
if (result.done) { if (result.done) {
self._done = true; self._done = true;
self._reader.releaseLock(); releaseReaderLock(self._reader);
} }
return result; return result;
}, function(error) { }, function(error) {
self._done = true; self._done = true;
try { self._reader.releaseLock(); } catch (e) {} releaseReaderLock(self._reader);
throw error; throw error;
}); });
}; };
@ -6720,14 +6738,14 @@ js::InitStreamExtras(JSContext* cx, HandleObject global)
this._done = true; this._done = true;
var reader = this._reader; var reader = this._reader;
if (this._preventCancel) { if (this._preventCancel) {
reader.releaseLock(); releaseReaderLock(reader);
return Promise.resolve({ value: value, done: true }); return Promise.resolve({ value: value, done: true });
} }
return reader.cancel(value).then(function() { return reader.cancel(value).then(function() {
reader.releaseLock(); releaseReaderLock(reader);
return { value: value, done: true }; return { value: value, done: true };
}, function(error) { }, function(error) {
try { reader.releaseLock(); } catch (e) {} releaseReaderLock(reader);
throw error; throw error;
}); });
}; };