diff options
Diffstat (limited to 'rescached.go')
| -rw-r--r-- | rescached.go | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/rescached.go b/rescached.go index e96a852..47701fb 100644 --- a/rescached.go +++ b/rescached.go @@ -10,11 +10,12 @@ import ( "log" "os" "sync" + "time" "git.sr.ht/~shulhan/pakakeh.go/lib/debug" "git.sr.ht/~shulhan/pakakeh.go/lib/dns" "git.sr.ht/~shulhan/pakakeh.go/lib/http" - "git.sr.ht/~shulhan/pakakeh.go/lib/memfs" + "git.sr.ht/~shulhan/pakakeh.go/lib/watchfs/v2" ) // Version of program, overwritten by build. @@ -24,7 +25,7 @@ var Version = `4.4.3` type Server struct { dns *dns.Server env *Environment - rcWatcher *memfs.Watcher + rcWatcher *watchfs.FileWatcher httpd *http.Server httpdRunner sync.Once @@ -208,33 +209,33 @@ func (srv *Server) Stop() { // watchResolvConf watch an update to file resolv.conf. func (srv *Server) watchResolvConf() { var ( - logp = "watchResolvConf" + logp = `watchResolvConf` + watchOpts = watchfs.FileWatcherOptions{ + File: srv.env.FileResolvConf, + Interval: 5 * time.Second, + } - ns memfs.NodeState + fi os.FileInfo err error + ok bool ) - srv.rcWatcher, err = memfs.NewWatcher(srv.env.FileResolvConf, 0) - if err != nil { - log.Fatalf("%s: %s", logp, err) - } + srv.rcWatcher = watchfs.WatchFile(watchOpts) - for ns = range srv.rcWatcher.C { - switch ns.State { - case memfs.FileStateDeleted: + for fi = range srv.rcWatcher.C { + if fi == nil { log.Printf("= %s: file %q deleted\n", logp, srv.env.FileResolvConf) return - default: - ok, err := srv.env.loadResolvConf() - if err != nil { - log.Printf("%s: %s", logp, err) - break - } - if !ok { - break - } + } - srv.dns.RestartForwarders(srv.env.NameServers) + ok, err = srv.env.loadResolvConf() + if err != nil { + log.Printf(`%s: %s`, logp, err) + break + } + if !ok { + break } + srv.dns.RestartForwarders(srv.env.NameServers) } } |
