diff options
Diffstat (limited to '')
-rw-r--r-- | src/bun.js/bindings/JSReadableHelper.cpp | 28 | ||||
-rw-r--r-- | src/bun.js/child_process.exports.js | 8 | ||||
-rw-r--r-- | test/bun.js/child_process-node.test.js | 6 |
3 files changed, 19 insertions, 23 deletions
diff --git a/src/bun.js/bindings/JSReadableHelper.cpp b/src/bun.js/bindings/JSReadableHelper.cpp index 0565e3f28..271bfb358 100644 --- a/src/bun.js/bindings/JSReadableHelper.cpp +++ b/src/bun.js/bindings/JSReadableHelper.cpp @@ -68,10 +68,16 @@ JSC_DEFINE_HOST_FUNCTION(jsReadable_maybeReadMore, (JSGlobalObject * lexicalGlob auto callData = JSC::getCallData(read); if (callData.type == CallData::Type::None) { throwException(lexicalGlobalObject, throwScope, createNotAFunctionError(lexicalGlobalObject, read)); - return JSValue::encode(jsUndefined()); + return JSValue::encode({}); } - auto& emitter = jsDynamicCast<JSEventEmitter*>(stream)->wrapped(); + auto* jsEmitter = jsEventEmitterCastFast(vm, lexicalGlobalObject, stream); + RETURN_IF_EXCEPTION(throwScope, {}); + if (UNLIKELY(!jsEmitter)) { + throwTypeError(lexicalGlobalObject, throwScope, "Stream must be an EventEmitter"_s); + return JSValue::encode(JSValue {}); + } + auto& emitter = jsEmitter->wrapped(); while ( !state->getBool(JSReadableState::reading) && !state->getBool(JSReadableState::ended) && (state->m_length < state->m_highWaterMark || (state->m_flowing > 0 && state->m_length == 0))) { @@ -102,10 +108,14 @@ void flow(JSGlobalObject* lexicalGlobalObject, JSObject* streamObj, JSReadableSt return; } - while (state->m_flowing > 0) { + if (state->m_flowing > 0) { + WebCore::EventEmitter& emitter = jsEventEmitterCastFast(vm, lexicalGlobalObject, streamObj)->wrapped(); - if (!callRead(streamObj, jsCast<JSFunction*>(read), MarkedArgumentBuffer(), vm, lexicalGlobalObject, jsCast<JSEventEmitter*>(streamObj)->wrapped())) { - break; + while (state->m_flowing > 0) { + + if (!callRead(streamObj, jsCast<JSFunction*>(read), MarkedArgumentBuffer(), vm, lexicalGlobalObject, emitter)) { + break; + } } } } @@ -118,8 +128,8 @@ JSC_DEFINE_HOST_FUNCTION(jsReadable_resume, (JSGlobalObject * lexicalGlobalObjec = jsEventEmitterCastFast(vm, lexicalGlobalObject, stream); if (UNLIKELY(!jsEmitterWrap)) { - throwTypeError(lexicalGlobalObject, throwScope, "stream is not EventEmitter"_s); - return JSValue::encode(jsUndefined()); + throwTypeError(lexicalGlobalObject, throwScope, "Stream must be an EventEmitter"_s); + return JSValue::encode(JSValue {}); } auto& emitter = jsEmitterWrap->wrapped(); @@ -172,8 +182,8 @@ EncodedJSValue emitReadable_(JSGlobalObject* lexicalGlobalObject, JSObject* stre auto* emitter = jsEventEmitterCastFast(vm, lexicalGlobalObject, stream); if (UNLIKELY(!emitter)) { - throwTypeError(lexicalGlobalObject, throwScope, "stream is not EventEmitter"_s); - return JSValue::encode(jsUndefined()); + throwTypeError(lexicalGlobalObject, throwScope, "Stream must be an EventEmitter"_s); + return JSValue::encode(JSValue {}); } emitter->wrapped().emitForBindings(eventType, args); diff --git a/src/bun.js/child_process.exports.js b/src/bun.js/child_process.exports.js index b0c32abb6..cbf7082ae 100644 --- a/src/bun.js/child_process.exports.js +++ b/src/bun.js/child_process.exports.js @@ -1150,14 +1150,6 @@ export class ChildProcess extends EventEmitter { return true; } - // TODO: Remove this at some point - // This is only here to report whether Bun.spawn actually killed the process - // OR if it didn't actually terminate properly - async _getIsReallyKilled() { - if (this.#handle) await this.#handle.exited; - return this.#handle?.killed ?? true; - } - #maybeClose() { debug("Attempting to maybe close..."); this.#closesGot++; diff --git a/test/bun.js/child_process-node.test.js b/test/bun.js/child_process-node.test.js index 716bf6e67..a28ae21f2 100644 --- a/test/bun.js/child_process-node.test.js +++ b/test/bun.js/child_process-node.test.js @@ -195,12 +195,6 @@ describe("ChildProcess.spawn", () => { { code: "ERR_UNKNOWN_SIGNAL", name: TYPE_ERR_NAME }, ); }); - - it("should die when killed", async () => { - const child = getChild(); - strictEqual(child.kill(), true); - strictEqual(await child._getIsReallyKilled(), true); - }); }); describe("ChildProcess spawn bad stdio", () => { |