Windows support for blobstore

This commit is contained in:
Mikkel Krautz 2011-05-16 23:32:41 +02:00
parent 34b9fbaec4
commit 4e20111ff6
4 changed files with 46 additions and 4 deletions

View file

@ -5,4 +5,10 @@ GOFILES = \
blobstore.go \ blobstore.go \
blobreader.go blobreader.go
ifeq ($(GOOS),windows)
GOFILES += pid_windows.go
else
GOFILES += pid_unix.go
endif
include $(GOROOT)/src/Make.pkg include $(GOROOT)/src/Make.pkg

View file

@ -186,10 +186,9 @@ func acquireLockfile(path string) os.Error {
return err return err
} }
pid, err := strconv.Atoi(string(content)) pid, err := strconv.Atoui64(string(content))
if err == nil { if err == nil {
errno := syscall.Kill(pid, 0) if pidRunning(pid) {
if errno == 0 {
return ErrLocked return ErrLocked
} }
} }
@ -220,7 +219,7 @@ func acquireLockfile(path string) os.Error {
} else if err != nil { } else if err != nil {
return err return err
} else { } else {
_, err = lockfile.WriteString(strconv.Itoa(syscall.Getpid())) _, err = lockfile.WriteString(strconv.Uitoa64(getPid()))
if err != nil { if err != nil {
return err return err
} }

17
pkg/blobstore/pid_unix.go Normal file
View file

@ -0,0 +1,17 @@
// Copyright (c) 2011 The Grumble Authors
// The use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE-file.
package blobstore
import (
"syscall"
)
func getPid() uint64 {
return uint64(syscall.Getpid())
}
func pidRunning(pid uint64) bool {
return syscall.Kill(int(pid), 0) == 0
}

View file

@ -0,0 +1,20 @@
// Copyright (c) 2011 The Grumble Authors
// The use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE-file.
package blobstore
import (
"syscall"
)
func getPid() uint64 {
handle, _ := syscall.GetCurrentProcess()
return uint64(handle)
}
func pidRunning(pid uint64) bool {
var status uint32
syscall.GetExitCodeProcess(uint32(pid), &status)
return status == 259 // STILL_ACTIVE
}