From cbdd3a4f8e92cfadf1fc1e88edae6f0c2f51777c Mon Sep 17 00:00:00 2001
From: Henrique Dias <hacdias@gmail.com>
Date: Sat, 3 Jun 2017 14:28:16 +0100
Subject: [PATCH] Add ExtraInfo to EventHook (#1692)

* Update plugins.go

* Add extraInfo to eventHook

* Add extraInfo to eventHook

* Update run.go

* Update run.go

* Update run.go
---
 caddy/caddymain/run.go | 2 +-
 plugins.go             | 6 +++---
 sigtrap.go             | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/caddy/caddymain/run.go b/caddy/caddymain/run.go
index 0eebe0108..b88997192 100644
--- a/caddy/caddymain/run.go
+++ b/caddy/caddymain/run.go
@@ -101,7 +101,7 @@ func Run() {
 	}
 
 	// Executes Startup events
-	caddy.EmitEvent(caddy.StartupEvent)
+	caddy.EmitEvent(caddy.StartupEvent, nil)
 
 	// Get Caddyfile input
 	caddyfileinput, err := caddy.LoadCaddyfile(serverType)
diff --git a/plugins.go b/plugins.go
index aaaa57fd2..a753ae948 100644
--- a/plugins.go
+++ b/plugins.go
@@ -224,7 +224,7 @@ const (
 )
 
 // EventHook is a type which holds information about a startup hook plugin.
-type EventHook func(eventType EventName) error
+type EventHook func(eventType EventName, eventInfo interface{}) error
 
 // RegisterEventHook plugs in hook. All the hooks should register themselves
 // and they must have a name.
@@ -241,9 +241,9 @@ func RegisterEventHook(name string, hook EventHook) {
 // EmitEvent executes the different hooks passing the EventType as an
 // argument. This is a blocking function. Hook developers should
 // use 'go' keyword if they don't want to block Caddy.
-func EmitEvent(event EventName) {
+func EmitEvent(event EventName, info interface{}) {
 	for name, hook := range eventHooks {
-		err := hook(event)
+		err := hook(event, info)
 
 		if err != nil {
 			log.Printf("error on '%s' hook: %v", name, err)
diff --git a/sigtrap.go b/sigtrap.go
index 3be3b3300..a456434bb 100644
--- a/sigtrap.go
+++ b/sigtrap.go
@@ -53,7 +53,7 @@ func trapSignalsCrossPlatform() {
 func executeShutdownCallbacks(signame string) (exitCode int) {
 	shutdownCallbacksOnce.Do(func() {
 		// execute third-party shutdown hooks
-		EmitEvent(ShutdownEvent)
+		EmitEvent(ShutdownEvent, signame)
 
 		errs := allShutdownCallbacks()
 		if len(errs) > 0 {