-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Copy shutdown listener logic from dcrd to: - improve OS signal handling. - add logging when a signal is received so it is clear why the process is being shutdown.
- Loading branch information
1 parent
5fb2258
commit c3559bf
Showing
3 changed files
with
60 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Copyright (c) 2015-2023 The Decred developers | ||
// Use of this source code is governed by an ISC | ||
// license that can be found in the LICENSE file. | ||
|
||
package main | ||
|
||
import ( | ||
"context" | ||
"log" | ||
"os" | ||
"os/signal" | ||
) | ||
|
||
// interruptSignals defines the default signals to catch in order to do a proper | ||
// shutdown. This may be modified during init depending on the platform. | ||
var interruptSignals = []os.Signal{os.Interrupt} | ||
|
||
// shutdownListener returns a context whose done channel will be closed when OS | ||
// signals such as SIGINT (Ctrl+C) are received. | ||
func shutdownListener() context.Context { | ||
ctx, cancel := context.WithCancel(context.Background()) | ||
go func() { | ||
interruptChannel := make(chan os.Signal, 1) | ||
signal.Notify(interruptChannel, interruptSignals...) | ||
|
||
// Listen for initial shutdown signal and cancel the context. | ||
select { | ||
case sig := <-interruptChannel: | ||
log.Printf("Received signal (%s). Shutting down...", sig) | ||
cancel() | ||
case <-ctx.Done(): | ||
} | ||
|
||
// Listen for repeated signals and display a message so the user knows | ||
// the shutdown is in progress and the process is not hung. | ||
for { | ||
sig := <-interruptChannel | ||
log.Printf("Received signal (%s). Already shutting down...", sig) | ||
} | ||
}() | ||
|
||
return ctx | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Copyright (c) 2021-2023 The Decred developers | ||
// Use of this source code is governed by an ISC | ||
// license that can be found in the LICENSE file. | ||
// | ||
//go:build windows || aix || android || darwin || dragonfly || freebsd || hurd || illumos || ios || linux || netbsd || openbsd || solaris | ||
|
||
package main | ||
|
||
import ( | ||
"syscall" | ||
) | ||
|
||
func init() { | ||
interruptSignals = append(interruptSignals, syscall.SIGTERM, syscall.SIGHUP) | ||
} |