aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/generate-jssink.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 16:38:45 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 16:38:45 -0700
commit48f64bc6e5fade5410413d31d0f17e9802a3917b (patch)
tree94c00737824119970f741eda92c96f71a16f9232 /src/bun.js/generate-jssink.js
parent667303fc861afaa33ceb273a1e1652c7cd706879 (diff)
downloadbun-48f64bc6e5fade5410413d31d0f17e9802a3917b.tar.gz
bun-48f64bc6e5fade5410413d31d0f17e9802a3917b.tar.zst
bun-48f64bc6e5fade5410413d31d0f17e9802a3917b.zip
[itnernal] Cleanup some of the streams code
Diffstat (limited to 'src/bun.js/generate-jssink.js')
-rw-r--r--src/bun.js/generate-jssink.js30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/bun.js/generate-jssink.js b/src/bun.js/generate-jssink.js
index 255bfe613..56ffcfb06 100644
--- a/src/bun.js/generate-jssink.js
+++ b/src/bun.js/generate-jssink.js
@@ -136,12 +136,7 @@ function header() {
void* wrapped() const { return m_sinkPtr; }
- void detach() {
- m_sinkPtr = nullptr;
- m_onPull.clear();
- m_onClose.clear();
- m_weakReadableStream.clear();
- }
+ void detach();
void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose);
DECLARE_VISIT_CHILDREN;
@@ -597,6 +592,25 @@ JSObject* JS${controllerName}::createPrototype(VM& vm, JSDOMGlobalObject& global
return ${controllerPrototypeName}::create(vm, &globalObject, ${controllerPrototypeName}::createStructure(vm, &globalObject, globalObject.objectPrototype()));
}
+void JS${controllerName}::detach() {
+ m_sinkPtr = nullptr;
+ m_onPull.clear();
+
+ auto readableStream = m_weakReadableStream.get();
+ auto onClose = m_onClose.get();
+ m_onClose.clear();
+
+ if (readableStream && onClose) {
+ JSC::JSGlobalObject *globalObject = this->globalObject();
+ auto callData = JSC::getCallData(onClose);
+ JSC::MarkedArgumentBuffer arguments;
+ arguments.append(readableStream);
+ arguments.append(jsUndefined());
+ JSC::call(globalObject, onClose, callData, JSC::jsUndefined(), arguments);
+ }
+
+ m_weakReadableStream.clear();
+}
`;
templ += `
@@ -871,7 +885,9 @@ extern "C" void ${name}__onClose(JSC__JSValue controllerValue, JSC__JSValue reas
auto callData = JSC::getCallData(function);
JSC::MarkedArgumentBuffer arguments;
- arguments.append(controller);
+ auto readableStream = controller->m_weakReadableStream.get();
+ arguments.append(readableStream ? readableStream : JSC::jsUndefined());
+
arguments.append(JSC::JSValue::decode(reason));
JSC::call(globalObject, function, callData, JSC::jsUndefined(), arguments);
}