Jelajahi Sumber

cmd/dockerd: ignore SIGPIPE using signal.Ignore

The fix to ignore SIGPIPE signals was originally added in the Go 1.4
era. signal.Ignore was first added in Go 1.5.

Signed-off-by: Cory Snider <csnider@mirantis.com>
Cory Snider 2 tahun lalu
induk
melakukan
16d5d4b6e1
2 mengubah file dengan 9 tambahan dan 9 penghapusan
  1. 7 0
      cmd/dockerd/docker.go
  2. 2 9
      cmd/dockerd/trap/trap.go

+ 7 - 0
cmd/dockerd/docker.go

@@ -3,6 +3,8 @@ package main
 import (
 	"fmt"
 	"os"
+	"os/signal"
+	"syscall"
 
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/dockerversion"
@@ -77,6 +79,11 @@ func main() {
 		return
 	}
 
+	// Ignore SIGPIPE events. These are generated by systemd when journald is restarted while
+	// the docker daemon is not restarted and also running under systemd.
+	// Fixes https://github.com/docker/docker/issues/19728
+	signal.Ignore(syscall.SIGPIPE)
+
 	// initial log formatting; this setting is updated after the daemon configuration is loaded.
 	logrus.SetFormatter(&logrus.TextFormatter{
 		TimestampFormat: jsonmessage.RFC3339NanoFixed,

+ 2 - 9
cmd/dockerd/trap/trap.go

@@ -15,22 +15,15 @@ import (
 //   - If SIGINT or SIGTERM are received, `cleanup` is called, then the process is terminated.
 //   - If SIGINT or SIGTERM are received 3 times before cleanup is complete, then cleanup is
 //     skipped and the process is terminated immediately (allows force quit of stuck daemon)
-//   - Ignore SIGPIPE events. These are generated by systemd when journald is restarted while
-//     the docker daemon is not restarted and also running under systemd.
-//     Fixes https://github.com/docker/docker/issues/19728
 func Trap(cleanup func(), logger interface {
 	Info(args ...interface{})
 }) {
 	c := make(chan os.Signal, 1)
-	// we will handle INT, TERM, SIGPIPE here
-	signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGPIPE)
+	// we will handle INT, TERM here
+	signal.Notify(c, os.Interrupt, syscall.SIGTERM)
 	go func() {
 		interruptCount := uint32(0)
 		for sig := range c {
-			if sig == syscall.SIGPIPE {
-				continue
-			}
-
 			go func(sig os.Signal) {
 				logger.Info(fmt.Sprintf("Processing signal '%v'", sig))
 				switch sig {