Browse Source

better handling of os signals

pull/2/head
Chris Lu 11 years ago
parent
commit
dac95464b8
  1. 15
      go/weed/mount_std.go
  2. 15
      go/weed/server.go
  3. 27
      go/weed/signal_handling.go
  4. 8
      go/weed/signal_handling_notsupported.go
  5. 13
      go/weed/volume.go

15
go/weed/mount_std.go

@ -11,7 +11,6 @@ import (
"code.google.com/p/weed-fs/go/util"
"fmt"
"os"
"os/signal"
"runtime"
)
@ -28,16 +27,10 @@ func runMount(cmd *Command, args []string) bool {
return false
}
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt, os.Kill)
go func() {
for _ = range signalChan {
// sig is a ^C, handle it
fuse.Unmount(*mountOptions.dir)
c.Close()
os.Exit(0)
}
}()
OnInterrupt(func() {
fuse.Unmount(*mountOptions.dir)
c.Close()
})
err = fs.Serve(c, WFS{})
if err != nil {

15
go/weed/server.go

@ -7,7 +7,6 @@ import (
"github.com/gorilla/mux"
"net/http"
"os"
"os/signal"
"runtime"
"runtime/pprof"
"strconv"
@ -218,16 +217,10 @@ func runServer(cmd *Command, args []string) bool {
glog.Fatalf(e.Error())
}
// deal with control+c
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt, os.Kill)
go func() {
for _ = range signalChan {
volumeServer.Shutdown()
pprof.StopCPUProfile()
os.Exit(0)
}
}()
OnInterrupt(func() {
volumeServer.Shutdown()
pprof.StopCPUProfile()
})
if e := http.Serve(volumeListener, r); e != nil {
glog.Fatalf("Fail to serve:%s", e.Error())

27
go/weed/signal_handling.go

@ -0,0 +1,27 @@
// +build !plan9
package main
import (
"os"
"os/signal"
"syscall"
)
func OnInterrupt(fn func()) {
// deal with control+c,etc
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan,
os.Interrupt,
os.Kill,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go func() {
for _ = range signalChan {
fn()
os.Exit(0)
}
}()
}

8
go/weed/signal_handling_notsupported.go

@ -0,0 +1,8 @@
// +build plan9
package main
import ()
func OnInterrupt(fn func()) {
}

13
go/weed/volume.go

@ -6,7 +6,6 @@ import (
"code.google.com/p/weed-fs/go/weed/weed_server"
"net/http"
"os"
"os/signal"
"runtime"
"strconv"
"strings"
@ -92,15 +91,9 @@ func runVolume(cmd *Command, args []string) bool {
glog.Fatalf(e.Error())
}
// deal with control+c
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt, os.Kill)
go func() {
for _ = range signalChan {
volumeServer.Shutdown()
os.Exit(0)
}
}()
OnInterrupt(func() {
volumeServer.Shutdown()
})
if e := http.Serve(listener, r); e != nil {
glog.Fatalf("Fail to serve:%s", e.Error())

Loading…
Cancel
Save