debugtrap_windows.go 709 B

123456789101112131415161718192021222324252627282930
  1. package daemon
  2. import (
  3. "fmt"
  4. "os"
  5. "syscall"
  6. "github.com/Sirupsen/logrus"
  7. "github.com/docker/docker/pkg/signal"
  8. "github.com/docker/docker/pkg/system"
  9. )
  10. func setupDumpStackTrap(root string) {
  11. // Windows does not support signals like *nix systems. So instead of
  12. // trapping on SIGUSR1 to dump stacks, we wait on a Win32 event to be
  13. // signaled.
  14. go func() {
  15. sa := syscall.SecurityAttributes{
  16. Length: 0,
  17. }
  18. ev := "Global\\docker-daemon-" + fmt.Sprint(os.Getpid())
  19. if h, _ := system.CreateEvent(&sa, false, false, ev); h != 0 {
  20. logrus.Debugf("Stackdump - waiting signal at %s", ev)
  21. for {
  22. syscall.WaitForSingleObject(h, syscall.INFINITE)
  23. signal.DumpStacks(root)
  24. }
  25. }
  26. }()
  27. }