Use same logic for skipping single instance check on Linux as on Mac/Win (#19446)
Michael Sloan
and
Nathan Sobo
created 1 year ago
Release Notes:
- Linux: Now skips check which exits with "zed is already running" when
in development mode or when run with `zed-local`, matching the behavior
on Mac and Windows
Co-authored-by: Nathan Sobo <nathan@zed.dev>
Change summary
crates/zed/src/main.rs | 45 ++++++++++------------
crates/zed/src/zed/mac_only_instance.rs | 4 --
crates/zed/src/zed/windows_only_instance.rs | 8 ----
3 files changed, 21 insertions(+), 36 deletions(-)
Detailed changes
@@ -32,7 +32,7 @@ use node_runtime::{NodeBinaryOptions, NodeRuntime};
use parking_lot::Mutex;
use project::project_settings::ProjectSettings;
use recent_projects::{open_ssh_project, SshSettings};
-use release_channel::{AppCommitSha, AppVersion};
+use release_channel::{AppCommitSha, AppVersion, ReleaseChannel};
use session::{AppSession, Session};
use settings::{
handle_settings_file_changes, watch_config_file, InvalidSettingsError, Settings, SettingsStore,
@@ -164,32 +164,29 @@ fn main() {
let (open_listener, mut open_rx) = OpenListener::new();
- #[cfg(target_os = "linux")]
- {
- if env::var("ZED_STATELESS").is_err() {
- if crate::zed::listen_for_cli_connections(open_listener.clone()).is_err() {
- println!("zed is already running");
- return;
+ let failed_single_instance_check =
+ if *db::ZED_STATELESS || *release_channel::RELEASE_CHANNEL == ReleaseChannel::Dev {
+ false
+ } else {
+ #[cfg(target_os = "linux")]
+ {
+ crate::zed::listen_for_cli_connections(open_listener.clone()).is_err()
}
- }
- }
- #[cfg(target_os = "windows")]
- {
- use zed::windows_only_instance::*;
- if !check_single_instance() {
- println!("zed is already running");
- return;
- }
- }
+ #[cfg(target_os = "windows")]
+ {
+ !crate::zed::windows_only_instance::check_single_instance()
+ }
- #[cfg(target_os = "macos")]
- {
- use zed::mac_only_instance::*;
- if ensure_only_instance() != IsOnlyInstance::Yes {
- println!("zed is already running");
- return;
- }
+ #[cfg(target_os = "macos")]
+ {
+ use zed::mac_only_instance::*;
+ ensure_only_instance() != IsOnlyInstance::Yes
+ }
+ };
+ if failed_single_instance_check {
+ println!("zed is already running");
+ return;
}
let git_hosting_provider_registry = Arc::new(GitHostingProviderRegistry::new());
@@ -87,10 +87,6 @@ pub enum IsOnlyInstance {
}
pub fn ensure_only_instance() -> IsOnlyInstance {
- if *db::ZED_STATELESS || *release_channel::RELEASE_CHANNEL == ReleaseChannel::Dev {
- return IsOnlyInstance::Yes;
- }
-
if check_got_handshake() {
return IsOnlyInstance::No;
}
@@ -17,14 +17,6 @@ fn retrieve_app_instance_event_identifier() -> &'static str {
}
pub fn check_single_instance() -> bool {
- if *db::ZED_STATELESS || *release_channel::RELEASE_CHANNEL == ReleaseChannel::Dev {
- return true;
- }
-
- check_single_instance_event()
-}
-
-fn check_single_instance_event() -> bool {
unsafe {
CreateEventW(
None,