Use same logic for skipping single instance check on Linux as on Mac/Win (#19446)

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>
This commit is contained in:
Michael Sloan 2024-10-29 10:12:34 -06:00 committed by GitHub
parent 5893e85708
commit 3fed738d2f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 36 deletions

View file

@ -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());

View file

@ -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;
}

View file

@ -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,