diff options
Diffstat (limited to 'ext/flash')
-rw-r--r-- | ext/flash/01_http.js | 9 | ||||
-rw-r--r-- | ext/flash/lib.rs | 12 |
2 files changed, 13 insertions, 8 deletions
diff --git a/ext/flash/01_http.js b/ext/flash/01_http.js index fcea23a95..789979ff9 100644 --- a/ext/flash/01_http.js +++ b/ext/flash/01_http.js @@ -10,7 +10,7 @@ const { ReadableStream, ReadableStreamPrototype, - getReadableStreamRid, + getReadableStreamResourceBacking, readableStreamClose, _state, } = window.__bootstrap.streams; @@ -333,8 +333,8 @@ } if (isStreamingResponseBody === true) { - const resourceRid = getReadableStreamRid(respBody); - if (resourceRid) { + const resourceBacking = getReadableStreamResourceBacking(respBody); + if (resourceBacking) { if (respBody.locked) { throw new TypeError("ReadableStream is locked."); } @@ -352,7 +352,8 @@ ), serverId, i, - resourceRid, + resourceBacking.rid, + resourceBacking.autoClose, ).then(() => { // Release JS lock. readableStreamClose(respBody); diff --git a/ext/flash/lib.rs b/ext/flash/lib.rs index 0714e379d..a7bd8b439 100644 --- a/ext/flash/lib.rs +++ b/ext/flash/lib.rs @@ -205,16 +205,20 @@ async fn op_flash_write_resource( server_id: u32, token: u32, resource_id: deno_core::ResourceId, + auto_close: bool, ) -> Result<(), AnyError> { - let resource = op_state.borrow_mut().resource_table.take_any(resource_id)?; - let sock = { + let (resource, sock) = { let op_state = &mut op_state.borrow_mut(); + let resource = if auto_close { + op_state.resource_table.take_any(resource_id)? + } else { + op_state.resource_table.get_any(resource_id)? + }; let flash_ctx = op_state.borrow_mut::<FlashContext>(); let ctx = flash_ctx.servers.get_mut(&server_id).unwrap(); - ctx.requests.remove(&token).unwrap().socket() + (resource, ctx.requests.remove(&token).unwrap().socket()) }; - drop(op_state); let _ = sock.write(&response); #[cfg(unix)] |