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