aboutsummaryrefslogtreecommitdiff
path: root/go
diff options
context:
space:
mode:
Diffstat (limited to 'go')
-rw-r--r--go/weed/mount_std.go15
-rw-r--r--go/weed/server.go15
-rw-r--r--go/weed/signal_handling.go27
-rw-r--r--go/weed/signal_handling_notsupported.go8
-rw-r--r--go/weed/volume.go13
5 files changed, 46 insertions, 32 deletions
diff --git a/go/weed/mount_std.go b/go/weed/mount_std.go
index 35ca4011d..ab3467d26 100644
--- a/go/weed/mount_std.go
+++ b/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 {
diff --git a/go/weed/server.go b/go/weed/server.go
index 7684dcbde..8d8504285 100644
--- a/go/weed/server.go
+++ b/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())
diff --git a/go/weed/signal_handling.go b/go/weed/signal_handling.go
new file mode 100644
index 000000000..5d57c8fdb
--- /dev/null
+++ b/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)
+ }
+ }()
+}
diff --git a/go/weed/signal_handling_notsupported.go b/go/weed/signal_handling_notsupported.go
new file mode 100644
index 000000000..ad4f37b0c
--- /dev/null
+++ b/go/weed/signal_handling_notsupported.go
@@ -0,0 +1,8 @@
+// +build plan9
+
+package main
+
+import ()
+
+func OnInterrupt(fn func()) {
+}
diff --git a/go/weed/volume.go b/go/weed/volume.go
index 5afa8eea5..c4177a98a 100644
--- a/go/weed/volume.go
+++ b/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())