diff --git a/ext/node/ops/blocklist.rs b/ext/node/ops/blocklist.rs index 87594f74ce2b84..b853a572337f7f 100644 --- a/ext/node/ops/blocklist.rs +++ b/ext/node/ops/blocklist.rs @@ -1,5 +1,6 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +use std::cell::RefCell; use std::collections::HashSet; use std::net::IpAddr; use std::net::Ipv4Addr; @@ -17,6 +18,12 @@ use ipnetwork::Ipv4Network; use ipnetwork::Ipv6Network; use serde::Serialize; +pub struct BlockListResource { + blocklist: RefCell, +} + +impl deno_core::GcResource for BlockListResource {} + #[derive(Serialize)] struct SocketAddressSerialization(String, String); @@ -59,51 +66,52 @@ pub fn op_socket_address_get_serialization( #[op2] #[cppgc] -pub fn op_blocklist_new() -> BlockList { - BlockList::new() +pub fn op_blocklist_new() -> BlockListResource { + let blocklist = BlockList::new(); + BlockListResource { + blocklist: RefCell::new(blocklist), + } } #[op2(fast)] pub fn op_blocklist_add_address( - #[cppgc] blocklist: &mut BlockList, + #[cppgc] wrap: &BlockListResource, #[string] addr: &str, ) -> Result<(), AnyError> { - blocklist.add_address(addr) + wrap.blocklist.borrow_mut().add_address(addr) } #[op2(fast)] pub fn op_blocklist_add_range( - #[cppgc] blocklist: &mut BlockList, + #[cppgc] wrap: &BlockListResource, #[string] start: &str, #[string] end: &str, ) -> Result { - blocklist.add_range(start, end) + wrap.blocklist.borrow_mut().add_range(start, end) } #[op2(fast)] pub fn op_blocklist_add_subnet( - #[cppgc] blocklist: &mut BlockList, + #[cppgc] wrap: &BlockListResource, #[string] addr: &str, #[smi] prefix: u8, ) -> Result<(), AnyError> { - blocklist.add_subnet(addr, prefix) + wrap.blocklist.borrow_mut().add_subnet(addr, prefix) } #[op2(fast)] pub fn op_blocklist_check( - #[cppgc] blocklist: &BlockList, + #[cppgc] wrap: &BlockListResource, #[string] addr: &str, - #[string] type_: &str, + #[string] r#type: &str, ) -> Result { - blocklist.check(addr, type_) + wrap.blocklist.borrow().check(addr, r#type) } struct BlockList { rules: HashSet, } -impl deno_core::GcResource for BlockList {} - impl BlockList { pub fn new() -> Self { BlockList { diff --git a/ext/node/ops/zlib/mod.rs b/ext/node/ops/zlib/mod.rs index 7eabc3f09c221f..9e030176abf9fd 100644 --- a/ext/node/ops/zlib/mod.rs +++ b/ext/node/ops/zlib/mod.rs @@ -2,6 +2,8 @@ use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::op2; +use std::borrow::Cow; +use std::cell::RefCell; use zlib::*; mod alloc; @@ -228,17 +230,17 @@ impl ZlibInner { } struct Zlib { - inner: Option, + inner: RefCell>, } -impl Zlib { - fn as_mut(&mut self) -> Option<&mut ZlibInner> { - self.inner.as_mut() +impl deno_core::GcResource for Zlib {} + +impl deno_core::Resource for Zlib { + fn name(&self) -> Cow { + "zlib".into() } } -impl deno_core::GcResource for Zlib {} - #[op2] #[cppgc] pub fn op_zlib_new(#[smi] mode: i32) -> Result { @@ -249,12 +251,15 @@ pub fn op_zlib_new(#[smi] mode: i32) -> Result { ..Default::default() }; - Ok(Zlib { inner: Some(inner) }) + Ok(Zlib { + inner: RefCell::new(Some(inner)), + }) } #[op2(fast)] -pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> { - let zlib = zlib +pub fn op_zlib_close(#[cppgc] resource: &Zlib) -> Result<(), AnyError> { + let mut resource = resource.inner.borrow_mut(); + let zlib = resource .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -268,7 +273,7 @@ pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> { #[op2(fast)] #[smi] pub fn op_zlib_write( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, #[smi] flush: i32, #[buffer] input: &[u8], #[smi] in_off: u32, @@ -278,6 +283,7 @@ pub fn op_zlib_write( #[smi] out_len: u32, #[buffer] result: &mut [u32], ) -> Result { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -295,13 +301,14 @@ pub fn op_zlib_write( #[op2(fast)] #[smi] pub fn op_zlib_init( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, #[smi] level: i32, #[smi] window_bits: i32, #[smi] mem_level: i32, #[smi] strategy: i32, #[buffer] dictionary: &[u8], ) -> Result { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -341,7 +348,8 @@ pub fn op_zlib_init( #[op2(fast)] #[smi] -pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result { +pub fn op_zlib_reset(#[cppgc] resource: &Zlib) -> Result { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -353,9 +361,10 @@ pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result { #[op2(fast)] pub fn op_zlib_close_if_pending( - #[cppgc] zlib: &mut Zlib, + #[cppgc] resource: &Zlib, ) -> Result<(), AnyError> { let pending_close = { + let mut zlib = resource.inner.borrow_mut(); let zlib = zlib .as_mut() .ok_or_else(|| type_error("zlib not initialized"))?; @@ -364,7 +373,7 @@ pub fn op_zlib_close_if_pending( zlib.pending_close }; if pending_close { - if let Some(mut res) = zlib.inner.take() { + if let Some(mut res) = resource.inner.borrow_mut().take() { let _ = res.close(); } }