From fc413e2403068d82c9ccc32014ce3ed2d9a90ab5 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Thu, 15 Oct 2015 00:11:26 -0600 Subject: [PATCH] First use of OncePerServerBlock in a Setup function startup and shutdown commands should only be executed once per appearance in the Caddyfile (naturally meaning once per server block). Notice that we support multiple occurrences of startup and shutdown in the same server block by building the callback array incrementally as we parse the Caddyfile, then we append all the callbacks all at once. Quite literally, the OncePerServerBlock function executes only once per server block! --- config/setup/startupshutdown.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/config/setup/startupshutdown.go b/config/setup/startupshutdown.go index befadd425..ddcd1e647 100644 --- a/config/setup/startupshutdown.go +++ b/config/setup/startupshutdown.go @@ -20,6 +20,8 @@ func Shutdown(c *Controller) (middleware.Middleware, error) { // using c to parse the line. It appends the callback function // to the list of callback functions passed in by reference. func registerCallback(c *Controller, list *[]func() error) error { + var funcs []func() error + for c.Next() { args := c.RemainingArgs() if len(args) == 0 { @@ -50,8 +52,12 @@ func registerCallback(c *Controller, list *[]func() error) error { return cmd.Run() } - *list = append(*list, fn) + funcs = append(funcs, fn) } + c.OncePerServerBlock(func() { + *list = append(*list, funcs...) + }) + return nil }