Skip to content

Commit faf98d8

Browse files
committed
enhance: remove process lock file after the first instance exited
Signed-off-by: leo <longshuang@msn.cn>
1 parent bc3ee04 commit faf98d8

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

src/Models/IpcChannel.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,22 @@ public IpcChannel()
1919
IsFirstInstance = false;
2020

2121
var lockFile = GetLockFilePath();
22+
_lockFilePath = lockFile.Path;
23+
2224
if (OperatingSystem.IsLinux() && lockFile.NeedChangePermissions)
2325
{
2426
// On Linux, if the lock file is created in the XDG_RUNTIME_DIR, we need to set the permissions to 700 (rwx------) to ensure that only the current user can access it.
2527
try
2628
{
27-
_singletonLock = new FileStream(lockFile.Path, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None);
28-
File.SetUnixFileMode(lockFile.Path, File.GetUnixFileMode(lockFile.Path) | UnixFileMode.StickyBit);
29+
_singletonLock = new FileStream(_lockFilePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None);
30+
File.SetUnixFileMode(_lockFilePath, File.GetUnixFileMode(_lockFilePath) | UnixFileMode.StickyBit);
2931
IsFirstInstance = true;
3032
}
3133
catch
3234
{
3335
try
3436
{
35-
_singletonLock = new FileStream(lockFile.Path, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
37+
_singletonLock = new FileStream(_lockFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
3638
IsFirstInstance = true;
3739
}
3840
catch
@@ -45,7 +47,7 @@ public IpcChannel()
4547
{
4648
try
4749
{
48-
_singletonLock = File.Open(lockFile.Path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
50+
_singletonLock = File.Open(_lockFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
4951
IsFirstInstance = true;
5052
}
5153
catch
@@ -99,6 +101,9 @@ public void Dispose()
99101
{
100102
_cancellationTokenSource?.Cancel();
101103
_singletonLock?.Dispose();
104+
105+
if (IsFirstInstance && File.Exists(_lockFilePath))
106+
File.Delete(_lockFilePath);
102107
}
103108

104109
private LockFile GetLockFilePath()
@@ -165,6 +170,7 @@ private async void StartServer()
165170

166171
private record LockFile(string Path, bool NeedChangePermissions);
167172

173+
private string _lockFilePath = null;
168174
private FileStream _singletonLock = null;
169175
private NamedPipeServerStream _server = null;
170176
private CancellationTokenSource _cancellationTokenSource = null;

0 commit comments

Comments
 (0)