Browse Source

fix #1570

Handle panics in rehash, even if it was triggered by SIGHUP
tags/v2.6.0-rc1
Shivaram Lingamneni 3 years ago
parent
commit
4e49a25ba6
1 changed files with 14 additions and 6 deletions
  1. 14
    6
      irc/server.go

+ 14
- 6
irc/server.go View File

153
 			return
153
 			return
154
 
154
 
155
 		case <-server.rehashSignal:
155
 		case <-server.rehashSignal:
156
-			go func() {
157
-				server.logger.Info("server", "Rehashing due to SIGHUP")
158
-				server.rehash()
159
-			}()
156
+			server.logger.Info("server", "Rehashing due to SIGHUP")
157
+			go server.rehash()
160
 		}
158
 		}
161
 	}
159
 	}
162
 }
160
 }
520
 
518
 
521
 // rehash reloads the config and applies the changes from the config file.
519
 // rehash reloads the config and applies the changes from the config file.
522
 func (server *Server) rehash() error {
520
 func (server *Server) rehash() error {
521
+	// #1570; this needs its own panic handling because it can be invoked via SIGHUP
522
+	defer func() {
523
+		if r := recover(); r != nil {
524
+			if server.Config().Debug.recoverFromErrors {
525
+				server.logger.Error("internal",
526
+					fmt.Sprintf("Panic during rehash: %v\n%s", r, debug.Stack()))
527
+			} else {
528
+				panic(r)
529
+			}
530
+		}
531
+	}()
532
+
523
 	server.logger.Info("server", "Attempting rehash")
533
 	server.logger.Info("server", "Attempting rehash")
524
 
534
 
525
 	// only let one REHASH go on at a time
535
 	// only let one REHASH go on at a time
526
 	server.rehashMutex.Lock()
536
 	server.rehashMutex.Lock()
527
 	defer server.rehashMutex.Unlock()
537
 	defer server.rehashMutex.Unlock()
528
 
538
 
529
-	server.logger.Debug("server", "Got rehash lock")
530
-
531
 	config, err := LoadConfig(server.configFilename)
539
 	config, err := LoadConfig(server.configFilename)
532
 	if err != nil {
540
 	if err != nil {
533
 		server.logger.Error("server", "failed to load config file", err.Error())
541
 		server.logger.Error("server", "failed to load config file", err.Error())

Loading…
Cancel
Save