Commit 691204ce authored by Matthew Holt's avatar Matthew Holt

OncePerServerBlock may now return an error

parent a518049f
......@@ -66,9 +66,15 @@ func Load(filename string, input io.Reader) (Group, error) {
// server config and the dispenser containing only
// this directive's tokens.
controller := &setup.Controller{
Config: &config,
Dispenser: parse.NewDispenserTokens(filename, tokens),
OncePerServerBlock: func(f func()) { onces[dir.name].Do(f) },
Config: &config,
Dispenser: parse.NewDispenserTokens(filename, tokens),
OncePerServerBlock: func(f func() error) error {
var err error
onces[dir.name].Do(func() {
err = f()
})
return err
},
}
midware, err := dir.setup(controller)
......
......@@ -19,8 +19,11 @@ type Controller struct {
// OncePerServerBlock is a function that executes f
// exactly once per server block, no matter how many
// hosts are associated with it.
OncePerServerBlock func(f func())
// hosts are associated with it. If it is the first
// time, the function f is executed immediately
// (not deferred) and may return an error which is
// returned by OncePerServerBlock.
OncePerServerBlock func(f func() error) error
}
// NewTestController creates a new *Controller for
......
......@@ -55,9 +55,8 @@ func registerCallback(c *Controller, list *[]func() error) error {
funcs = append(funcs, fn)
}
c.OncePerServerBlock(func() {
return c.OncePerServerBlock(func() error {
*list = append(*list, funcs...)
return nil
})
return nil
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment