diff --git a/default_handler.go b/default_handler.go
index <HASH>..<HASH> 100644
--- a/default_handler.go
+++ b/default_handler.go
@@ -248,20 +248,26 @@ type defaultSignalHandler struct {
 }
 
 func (sh *defaultSignalHandler) DeliverSignal(intf, name string, signal *Signal) {
-	go func() {
-		sh.RLock()
-		defer sh.RUnlock()
-		if sh.closed {
+	sh.RLock()
+	defer sh.RUnlock()
+	if sh.closed {
+		return
+	}
+	for _, ch := range sh.signals {
+		select {
+		case ch <- signal:
+		case <-sh.closeChan:
 			return
+		default:
+			go func() {
+				select {
+				case ch <- signal:
+				case <-sh.closeChan:
+					return
+				}
+			}()
 		}
-		for _, ch := range sh.signals {
-			select {
-			case ch <- signal:
-			case <-sh.closeChan:
-				return
-			}
-		}
-	}()
+	}
 }
 
 func (sh *defaultSignalHandler) Init() error {
Speed up signals delivery

Try to push signals to their receiving channels
before spawning a goroutine.