]> git.wincent.com - passage.git/commitdiff
Let SIGUSR1 reset cache
authorGreg Hurrell <greg@hurrell.net>
Thu, 8 Dec 2016 06:16:32 +0000 (22:16 -0800)
committerGreg Hurrell <greg@hurrell.net>
Thu, 8 Dec 2016 06:16:32 +0000 (22:16 -0800)
Useful if you want to dump the cache when the screensaver runs (eg. via
hammerspoon), or implement a time-based expiry (via cron).

passage.go

index 8df11c675fb29cb477375d52947cf8f5574d06c2..7ccb548bfb1bedf9dac07f2d54641a12bac99a96 100644 (file)
@@ -19,7 +19,7 @@ type Request struct {
 var cache map[string][]byte
 
 func main() {
-       cache = make(map[string][]byte)
+       resetCache()
        path := getSockPath()
        syscall.Umask(0077)
        listener, err := net.Listen("unix", path)
@@ -40,13 +40,27 @@ func main() {
        }()
        log.Print("Open and ready for business on UNIX socket at ", path)
 
+       reload := make(chan os.Signal, 1)
+       signal.Notify(reload, syscall.SIGUSR1)
+       go func() {
+               for {
+                       sig := <-reload
+                       log.Print("Got signal ", sig, ": resetting")
+                       resetCache()
+               }
+       }()
+
        // Need to catch signals in order for `defer`-ed clean-up items to run.
-       c := make(chan os.Signal, 1)
-       signal.Notify(c, os.Interrupt, os.Kill, syscall.SIGTERM)
-       sig := <-c
+       term := make(chan os.Signal, 1)
+       signal.Notify(term, os.Interrupt, os.Kill, syscall.SIGTERM)
+       sig := <-term
        log.Print("Got signal ", sig)
 }
 
+func resetCache() {
+       cache = make(map[string][]byte)
+}
+
 func getSockPath() string {
        user, err := user.Current()
        if err != nil {