commit f2ae16a227ad0a1baa301fdd6c38c8460e9396ff
Author: Yawning Angel <[email protected]>
Date:   Thu Dec 15 20:14:18 2016 +0000

    Bug 20993: Handle the lock file better.
    
    Instead of relying on creating the lock file with O_EXCL, just use
    `flock()`, so that users don't need to manually remove the lock file if
    the app crashes.
---
 ChangeLog                                       |  1 +
 src/cmd/sandboxed-tor-browser/internal/ui/ui.go | 13 +++++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5e3ee14..01e28d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 Changes in version 0.0.3 - UNRELEASED:
+ * Bug 20993: Handle the lock file better.
  * Bug 20970: Firefox crashes if the security slider is left at the default
    on certain pages.
  * Bug 20973: Silence Gdk warnings on systems with integrated png loader.
diff --git a/src/cmd/sandboxed-tor-browser/internal/ui/ui.go 
b/src/cmd/sandboxed-tor-browser/internal/ui/ui.go
index cd9a8c1..973024c 100644
--- a/src/cmd/sandboxed-tor-browser/internal/ui/ui.go
+++ b/src/cmd/sandboxed-tor-browser/internal/ui/ui.go
@@ -31,6 +31,7 @@ import (
        "os/exec"
        "path/filepath"
        "strings"
+       "syscall"
 
        "git.schwanenlied.me/yawning/grab.git"
        "git.schwanenlied.me/yawning/hpkp.git"
@@ -328,7 +329,6 @@ type lockFile struct {
 
 func (l *lockFile) unlock() {
        defer l.f.Close()
-       os.Remove(l.f.Name())
 }
 
 func newLockFile(c *Common) (*lockFile, error) {
@@ -338,9 +338,18 @@ func newLockFile(c *Common) (*lockFile, error) {
        p := filepath.Join(c.Cfg.RuntimeDir, lockFileName)
 
        var err error
-       if l.f, err = os.OpenFile(p, os.O_CREATE|os.O_EXCL, utils.FileMode); 
err != nil {
+       if l.f, err = os.OpenFile(p, os.O_CREATE, utils.FileMode); err != nil {
                return nil, err
        }
+
+       fd := int(l.f.Fd())
+       if err = syscall.Flock(fd, syscall.LOCK_EX|syscall.LOCK_NB); err != nil 
{
+               if err == syscall.EWOULDBLOCK {
+                       return nil, fmt.Errorf("`sandboxed-tor-browser` is 
already running")
+               }
+               return nil, err
+       }
+
        return l, nil
 }
 

_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to