|
@@ -153,10 +153,8 @@ func (server *Server) Run() {
|
153
|
153
|
return
|
154
|
154
|
|
155
|
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,14 +518,24 @@ func (client *Client) getWhoisOf(target *Client, hasPrivs bool, rb *ResponseBuff
|
520
|
518
|
|
521
|
519
|
// rehash reloads the config and applies the changes from the config file.
|
522
|
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
|
533
|
server.logger.Info("server", "Attempting rehash")
|
524
|
534
|
|
525
|
535
|
// only let one REHASH go on at a time
|
526
|
536
|
server.rehashMutex.Lock()
|
527
|
537
|
defer server.rehashMutex.Unlock()
|
528
|
538
|
|
529
|
|
- server.logger.Debug("server", "Got rehash lock")
|
530
|
|
-
|
531
|
539
|
config, err := LoadConfig(server.configFilename)
|
532
|
540
|
if err != nil {
|
533
|
541
|
server.logger.Error("server", "failed to load config file", err.Error())
|