aboutsummaryrefslogtreecommitdiff
path: root/template.go
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-01-08 11:50:29 +0100
committerSimon Ser <contact@emersion.fr>2020-01-08 11:50:29 +0100
commitad1d2ee7f4d3515c3acf2388697bc25c68f8a383 (patch)
tree9abdd117b474afade2844461a70d17f7a55632c8 /template.go
parent3d8569d185ebb6990ae7c28104fb1b3f6d7a5376 (diff)
downloadalps-ad1d2ee7f4d3515c3acf2388697bc25c68f8a383.tar.gz
alps-ad1d2ee7f4d3515c3acf2388697bc25c68f8a383.zip
Implement plugin/template reload on SIGUSR1
There's no way around having a global mutex, because we need to update the HTTP routes when reloading plugins. During reload we need to lock the whole server. Closes: https://todo.sr.ht/~sircmpwn/koushin/43
Diffstat (limited to 'template.go')
-rw-r--r--template.go11
1 files changed, 2 insertions, 9 deletions
diff --git a/template.go b/template.go
index 3502a3b..c8c3d6a 100644
--- a/template.go
+++ b/template.go
@@ -6,7 +6,6 @@ import (
"io"
"io/ioutil"
"os"
- "sync"
"github.com/labstack/echo/v4"
)
@@ -81,19 +80,15 @@ type renderer struct {
logger echo.Logger
defaultTheme string
- mutex sync.RWMutex
base *template.Template
themes map[string]*template.Template
}
func (r *renderer) Render(w io.Writer, name string, data interface{}, ectx echo.Context) error {
- r.mutex.RLock()
- defer r.mutex.RUnlock()
-
// ectx is the raw *echo.context, not our own *Context
ctx := ectx.Get("context").(*Context)
- for _, plugin := range ctx.Server.Plugins {
+ for _, plugin := range ctx.Server.plugins {
if err := plugin.Inject(ctx, name, data.(RenderData)); err != nil {
return fmt.Errorf("failed to run plugin '%v': %v", plugin.Name(), err)
}
@@ -121,7 +116,7 @@ func loadTheme(name string, base *template.Template) (*template.Template, error)
return theme, nil
}
-func (r *renderer) reload(plugins []Plugin) error {
+func (r *renderer) Load(plugins []Plugin) error {
base := template.New("")
for _, p := range plugins {
@@ -155,10 +150,8 @@ func (r *renderer) reload(plugins []Plugin) error {
}
}
- r.mutex.Lock()
r.base = base
r.themes = themes
- r.mutex.Unlock()
return nil
}