summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/examples/http_bench.rs16
-rw-r--r--core/resources.rs18
2 files changed, 12 insertions, 22 deletions
diff --git a/core/examples/http_bench.rs b/core/examples/http_bench.rs
index 764e04303..8635d4f23 100644
--- a/core/examples/http_bench.rs
+++ b/core/examples/http_bench.rs
@@ -190,19 +190,11 @@ pub fn bad_resource() -> Error {
struct TcpListener(tokio::net::TcpListener);
-impl Resource for TcpListener {
- fn inspect_repr(&self) -> &str {
- "tcpListener"
- }
-}
+impl Resource for TcpListener {}
struct TcpStream(tokio::net::TcpStream);
-impl Resource for TcpStream {
- fn inspect_repr(&self) -> &str {
- "tcpStream"
- }
-}
+impl Resource for TcpStream {}
lazy_static! {
static ref RESOURCE_TABLE: Mutex<ResourceTable> =
@@ -225,7 +217,7 @@ fn op_accept(record: Record, _zero_copy_buf: Option<PinnedBuf>) -> Box<HttpOp> {
.and_then(move |(stream, addr)| {
debug!("accept success {}", addr);
let mut table = lock_resource_table();
- let rid = table.add(Box::new(TcpStream(stream)));
+ let rid = table.add("tcpStream", Box::new(TcpStream(stream)));
Ok(rid as i32)
});
Box::new(fut)
@@ -239,7 +231,7 @@ fn op_listen(
let addr = "127.0.0.1:4544".parse::<SocketAddr>().unwrap();
let listener = tokio::net::TcpListener::bind(&addr).unwrap();
let mut table = lock_resource_table();
- let rid = table.add(Box::new(TcpListener(listener)));
+ let rid = table.add("tcpListener", Box::new(TcpListener(listener)));
Box::new(futures::future::ok(rid as i32))
}
diff --git a/core/resources.rs b/core/resources.rs
index 368f83454..1ba061d0b 100644
--- a/core/resources.rs
+++ b/core/resources.rs
@@ -17,7 +17,7 @@ pub type ResourceId = u32;
/// These store Deno's file descriptors. These are not necessarily the operating
/// system ones.
-type ResourceMap = HashMap<ResourceId, Box<dyn Resource>>;
+type ResourceMap = HashMap<ResourceId, (String, Box<dyn Resource>)>;
#[derive(Default)]
pub struct ResourceTable {
@@ -29,7 +29,7 @@ pub struct ResourceTable {
impl ResourceTable {
pub fn get<T: Resource>(&self, rid: ResourceId) -> Option<&T> {
- if let Some(resource) = self.map.get(&rid) {
+ if let Some((_name, resource)) = self.map.get(&rid) {
return resource.downcast_ref::<T>();
}
@@ -37,7 +37,7 @@ impl ResourceTable {
}
pub fn get_mut<T: Resource>(&mut self, rid: ResourceId) -> Option<&mut T> {
- if let Some(resource) = self.map.get_mut(&rid) {
+ if let Some((_name, resource)) = self.map.get_mut(&rid) {
return resource.downcast_mut::<T>();
}
@@ -51,9 +51,9 @@ impl ResourceTable {
next_rid as ResourceId
}
- pub fn add(&mut self, resource: Box<dyn Resource>) -> ResourceId {
+ pub fn add(&mut self, name: &str, resource: Box<dyn Resource>) -> ResourceId {
let rid = self.next_rid();
- let r = self.map.insert(rid, resource);
+ let r = self.map.insert(rid, (name.to_string(), resource));
assert!(r.is_none());
rid
}
@@ -62,18 +62,17 @@ impl ResourceTable {
self
.map
.iter()
- .map(|(key, value)| (*key, value.inspect_repr().to_string()))
+ .map(|(key, (name, _resource))| (*key, name.clone()))
.collect()
}
// close(2) is done by dropping the value. Therefore we just need to remove
// the resource from the RESOURCE_TABLE.
pub fn close(&mut self, rid: ResourceId) -> Option<()> {
- if let Some(resource) = self.map.remove(&rid) {
+ if let Some((_name, resource)) = self.map.remove(&rid) {
resource.close();
return Some(());
}
-
None
}
}
@@ -81,8 +80,7 @@ impl ResourceTable {
/// Abstract type representing resource in Deno.
pub trait Resource: Downcast + Any + Send {
/// Method that allows to cleanup resource.
+ // TODO(ry) remove this method. Resources should rely on drop trait instead.
fn close(&self) {}
-
- fn inspect_repr(&self) -> &str;
}
impl_downcast!(Resource);