aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <dylan.conway567@gmail.com> 2022-12-06 16:25:07 -0800
committerGravatar Dylan Conway <dylan.conway567@gmail.com> 2022-12-06 16:25:39 -0800
commit51d69d8c853ee634084c10b21720c0e201cc7721 (patch)
treed5c753beac1563cce7cd195c976528b06a1c1f3f
parent4dd2cb33b7603983f2ae9df425b8c0369acc9b61 (diff)
downloadbun-51d69d8c853ee634084c10b21720c0e201cc7721.tar.gz
bun-51d69d8c853ee634084c10b21720c0e201cc7721.tar.zst
bun-51d69d8c853ee634084c10b21720c0e201cc7721.zip
fix event emitter cast
Diffstat (limited to '')
-rw-r--r--src/bun.js/bindings/JSReadableHelper.cpp28
-rw-r--r--src/bun.js/child_process.exports.js8
-rw-r--r--test/bun.js/child_process-node.test.js6
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", () => {