diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-01-07 17:25:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-07 17:25:34 +0100 |
commit | fac64478157ee563b185edb5734688e4523df3a1 (patch) | |
tree | 888d562982e1fc37dfb9a4459928bcec84d55dfc /cli/ops/bench.rs | |
parent | 82e930726ee5dbac8e6eae0962c07c72daf9843c (diff) |
refactor(permissions): add PermissionsContainer struct for internal mutability (#17134)
Turns out we were cloning permissions which after prompting were discarded,
so the state of permissions was never preserved. To handle that we need to store
all permissions behind "Arc<Mutex<>>" (because there are situations where we
need to send them to other thread).
Testing and benching code still uses "Permissions" in most places - it's undesirable
to share the same permission set between various test/bench files - otherwise
granting or revoking permissions in one file would influence behavior of other test
files.
Diffstat (limited to 'cli/ops/bench.rs')
-rw-r--r-- | cli/ops/bench.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/cli/ops/bench.rs b/cli/ops/bench.rs index 6fc881f61..3b27ffa7e 100644 --- a/cli/ops/bench.rs +++ b/cli/ops/bench.rs @@ -9,7 +9,7 @@ use deno_core::ModuleSpecifier; use deno_core::OpState; use deno_runtime::permissions::create_child_permissions; use deno_runtime::permissions::ChildPermissionsArg; -use deno_runtime::permissions::Permissions; +use deno_runtime::permissions::PermissionsContainer; use serde::Deserialize; use serde::Serialize; use std::sync::atomic::AtomicUsize; @@ -40,7 +40,7 @@ pub fn init( } #[derive(Clone)] -struct PermissionsHolder(Uuid, Permissions); +struct PermissionsHolder(Uuid, PermissionsContainer); #[op] pub fn op_pledge_test_permissions( @@ -48,8 +48,12 @@ pub fn op_pledge_test_permissions( args: ChildPermissionsArg, ) -> Result<Uuid, AnyError> { let token = Uuid::new_v4(); - let parent_permissions = state.borrow_mut::<Permissions>(); - let worker_permissions = create_child_permissions(parent_permissions, args)?; + let parent_permissions = state.borrow_mut::<PermissionsContainer>(); + let worker_permissions = { + let mut parent_permissions = parent_permissions.0.lock(); + let perms = create_child_permissions(&mut parent_permissions, args)?; + PermissionsContainer::new(perms) + }; let parent_permissions = parent_permissions.clone(); if state.try_take::<PermissionsHolder>().is_some() { @@ -59,7 +63,7 @@ pub fn op_pledge_test_permissions( state.put::<PermissionsHolder>(PermissionsHolder(token, parent_permissions)); // NOTE: This call overrides current permission set for the worker - state.put::<Permissions>(worker_permissions); + state.put::<PermissionsContainer>(worker_permissions); Ok(token) } @@ -75,7 +79,7 @@ pub fn op_restore_test_permissions( } let permissions = permissions_holder.1; - state.put::<Permissions>(permissions); + state.put::<PermissionsContainer>(permissions); Ok(()) } else { Err(generic_error("no permissions to restore")) |