diff options
author | Kunal Mohan <kunalmohan99@gmail.com> | 2021-04-29 16:27:14 +0530 |
---|---|---|
committer | Kunal Mohan <kunalmohan99@gmail.com> | 2021-05-04 20:48:16 +0530 |
commit | 1eb732773aa583305353a1e63ffbac879f29f2d8 (patch) | |
tree | 151dffd48d06de2cc9f06cf79dcd89187a8f94a0 | |
parent | 9110e444b8ef2f96a0386b7c5e65283a2b5456c0 (diff) |
use Uuid to generate unique server socket names
-rw-r--r-- | Cargo.lock | 4 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/common/mod.rs | 7 | ||||
-rw-r--r-- | src/common/os_input_output.rs | 4 | ||||
-rw-r--r-- | src/server/mod.rs | 7 |
5 files changed, 18 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock index d596b9818..60cb7d6ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1774,6 +1774,9 @@ name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] [[package]] name = "value-bag" @@ -2222,6 +2225,7 @@ dependencies = [ "termios", "unicode-truncate", "unicode-width", + "uuid", "vte 0.8.0", "wasmer", "wasmer-wasi", diff --git a/Cargo.toml b/Cargo.toml index d75f3e457..4f71667bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ lazy_static = "1.4.0" wasmer = "1.0.0" wasmer-wasi = "1.0.0" interprocess = "1.1.1" +uuid = { version = "0.8.2", features = ["v4"] } zellij-tile = { path = "zellij-tile/", version = "0.5.0" } [dependencies.async-std] diff --git a/src/common/mod.rs b/src/common/mod.rs index 6061f1a62..4baf503f0 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -11,8 +11,10 @@ pub mod wasm_vm; use crate::panes::PaneId; use crate::server::ServerInstruction; +use crate::utils::consts::ZELLIJ_IPC_PIPE; use async_std::task_local; use errors::{get_current_ctx, ErrorContext}; +use lazy_static::lazy_static; use std::cell::RefCell; use std::sync::mpsc; @@ -73,3 +75,8 @@ task_local! { /// stack in the form of an [`ErrorContext`]. static ASYNCOPENCALLS: RefCell<ErrorContext> = RefCell::default() } + +lazy_static! { + pub static ref UNIQUE_ZELLIJ_IPC_PIPE: String = + ZELLIJ_IPC_PIPE.to_string() + uuid::Uuid::new_v4().to_string().as_str(); +} diff --git a/src/common/os_input_output.rs b/src/common/os_input_output.rs index a99a0d160..d8ef45f91 100644 --- a/src/common/os_input_output.rs +++ b/src/common/os_input_output.rs @@ -17,10 +17,10 @@ use std::process::{Child, Command}; use std::sync::{Arc, Mutex}; use crate::client::ClientInstruction; +use crate::common::UNIQUE_ZELLIJ_IPC_PIPE; use crate::errors::{get_current_ctx, ErrorContext}; use crate::panes::PositionAndSize; use crate::server::ServerInstruction; -use crate::utils::consts::ZELLIJ_IPC_PIPE; const IPC_BUFFER_SIZE: usize = 262144; @@ -404,7 +404,7 @@ impl ClientOsApi for ClientOsInputOutput { } } fn connect_to_server(&self) { - let socket = LocalSocketStream::connect(ZELLIJ_IPC_PIPE).unwrap(); + let socket = LocalSocketStream::connect(UNIQUE_ZELLIJ_IPC_PIPE.as_str()).unwrap(); let sock_fd = socket.as_raw_fd(); let dup_fd = unistd::dup(sock_fd).unwrap(); let receiver = unsafe { LocalSocketStream::from_raw_fd(dup_fd) }; diff --git a/src/server/mod.rs b/src/server/mod.rs index ca34861b9..3e0500b04 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -16,6 +16,7 @@ use zellij_tile::data::{Event, EventType, ModeInfo}; use crate::cli::CliArgs; use crate::client::ClientInstruction; +use crate::common::UNIQUE_ZELLIJ_IPC_PIPE; use crate::common::{ errors::{ContextType, PluginContext, PtyContext, ScreenContext, ServerContext}, input::actions::{Action, Direction}, @@ -29,7 +30,6 @@ use crate::common::{ use crate::layout::Layout; use crate::panes::PaneId; use crate::panes::PositionAndSize; -use crate::utils::consts::ZELLIJ_IPC_PIPE; /// Instructions related to server-side application including the /// ones sent by client to server @@ -83,8 +83,8 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, opts: CliArgs) -> thread::Jo let sessions = sessions.clone(); let send_server_instructions = send_server_instructions.clone(); move || { - drop(std::fs::remove_file(ZELLIJ_IPC_PIPE)); - let listener = LocalSocketListener::bind(ZELLIJ_IPC_PIPE).unwrap(); + drop(std::fs::remove_file(UNIQUE_ZELLIJ_IPC_PIPE.as_str())); + let listener = LocalSocketListener::bind(UNIQUE_ZELLIJ_IPC_PIPE.as_str()).unwrap(); for stream in listener.incoming() { match stream { Ok(stream) => { @@ -132,6 +132,7 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, opts: CliArgs) -> thread::Jo ServerInstruction::ClientExit => { *sessions.write().unwrap() = None; os_input.send_to_client(ClientInstruction::Exit); + drop(std::fs::remove_file(UNIQUE_ZELLIJ_IPC_PIPE.as_str())); break; } ServerInstruction::Render(output) => { |