summaryrefslogtreecommitdiff
path: root/cli/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/state.rs')
-rw-r--r--cli/state.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/cli/state.rs b/cli/state.rs
index 245919e7f..5ce432893 100644
--- a/cli/state.rs
+++ b/cli/state.rs
@@ -44,7 +44,7 @@ pub struct ThreadSafeState(Arc<State>);
pub struct State {
pub global_state: ThreadSafeGlobalState,
pub modules: Arc<Mutex<deno::Modules>>,
- pub permissions: DenoPermissions,
+ pub permissions: Arc<Mutex<DenoPermissions>>,
pub main_module: Option<ModuleSpecifier>,
pub worker_channels: Mutex<WorkerChannels>,
/// When flags contains a `.import_map_path` option, the content of the
@@ -213,6 +213,8 @@ impl ThreadSafeState {
pub fn new(
global_state: ThreadSafeGlobalState,
+ // If Some(perm), use perm. Else copy from global_state.
+ shared_permissions: Option<Arc<Mutex<DenoPermissions>>>,
main_module: Option<ModuleSpecifier>,
include_deno_namespace: bool,
internal_channels: WorkerChannels,
@@ -229,7 +231,11 @@ impl ThreadSafeState {
};
let modules = Arc::new(Mutex::new(deno::Modules::new()));
- let permissions = global_state.permissions.clone();
+ let permissions = if let Some(perm) = shared_permissions {
+ perm
+ } else {
+ Arc::new(Mutex::new(global_state.permissions.clone()))
+ };
let state = State {
global_state,
@@ -260,32 +266,32 @@ impl ThreadSafeState {
#[inline]
pub fn check_read(&self, filename: &str) -> Result<(), ErrBox> {
- self.permissions.check_read(filename)
+ self.permissions.lock().unwrap().check_read(filename)
}
#[inline]
pub fn check_write(&self, filename: &str) -> Result<(), ErrBox> {
- self.permissions.check_write(filename)
+ self.permissions.lock().unwrap().check_write(filename)
}
#[inline]
pub fn check_env(&self) -> Result<(), ErrBox> {
- self.permissions.check_env()
+ self.permissions.lock().unwrap().check_env()
}
#[inline]
pub fn check_net(&self, hostname: &str, port: u16) -> Result<(), ErrBox> {
- self.permissions.check_net(hostname, port)
+ self.permissions.lock().unwrap().check_net(hostname, port)
}
#[inline]
pub fn check_net_url(&self, url: &url::Url) -> Result<(), ErrBox> {
- self.permissions.check_net_url(url)
+ self.permissions.lock().unwrap().check_net_url(url)
}
#[inline]
pub fn check_run(&self) -> Result<(), ErrBox> {
- self.permissions.check_run()
+ self.permissions.lock().unwrap().check_run()
}
pub fn check_dyn_import(
@@ -327,6 +333,7 @@ impl ThreadSafeState {
ThreadSafeState::new(
ThreadSafeGlobalState::mock(argv),
+ None,
module_specifier,
true,
internal_channels,