From dcc748857f833a68de3fe36bfb4482ae2dfabd91 Mon Sep 17 00:00:00 2001 From: AswinT22 Date: Thu, 10 Jun 2021 08:45:38 +0100 Subject: [PATCH 1/2] stop before remove --- daemon_darwin.go | 6 ++++++ daemon_freebsd.go | 5 +++++ daemon_linux_systemd.go | 6 ++++++ daemon_linux_systemv.go | 6 ++++++ daemon_linux_upstart.go | 6 ++++++ daemon_windows.go | 3 +++ 6 files changed, 32 insertions(+) diff --git a/daemon_darwin.go b/daemon_darwin.go index 0c99343..44ebfb0 100644 --- a/daemon_darwin.go +++ b/daemon_darwin.go @@ -133,6 +133,12 @@ func (darwin *darwinRecord) Remove() (string, error) { return removeAction + failed, ErrNotInstalled } + if _, ok := darwin.checkRunning(); ok { + if err := exec.Command("launchctl", "unload", darwin.servicePath()).Run(); err != nil { + return removeAction + failed, err + } + } + if err := os.Remove(darwin.servicePath()); err != nil { return removeAction + failed, err } diff --git a/daemon_freebsd.go b/daemon_freebsd.go index 2d84d5f..1f83e29 100644 --- a/daemon_freebsd.go +++ b/daemon_freebsd.go @@ -162,6 +162,11 @@ func (bsd *bsdRecord) Remove() (string, error) { if !bsd.isInstalled() { return removeAction + failed, ErrNotInstalled } + if _, ok := bsd.checkRunning(); ok { + if err := exec.Command("service", bsd.name, bsd.getCmd("stop")).Run(); err != nil { + return removeAction + failed, err + } + } if err := os.Remove(bsd.servicePath()); err != nil { return removeAction + failed, err diff --git a/daemon_linux_systemd.go b/daemon_linux_systemd.go index d6e6cca..e157dda 100644 --- a/daemon_linux_systemd.go +++ b/daemon_linux_systemd.go @@ -120,6 +120,12 @@ func (linux *systemDRecord) Remove() (string, error) { return removeAction + failed, ErrNotInstalled } + if _, ok := linux.checkRunning(); ok { + if err := exec.Command("systemctl", "stop", linux.name+".service").Run(); err != nil { + return removeAction + failed, err + } + } + if err := exec.Command("systemctl", "disable", linux.name+".service").Run(); err != nil { return removeAction + failed, err } diff --git a/daemon_linux_systemv.go b/daemon_linux_systemv.go index 588f6db..bbc9554 100644 --- a/daemon_linux_systemv.go +++ b/daemon_linux_systemv.go @@ -121,6 +121,12 @@ func (linux *systemVRecord) Remove() (string, error) { return removeAction + failed, ErrNotInstalled } + if _, ok := linux.checkRunning(); ok { + if err := exec.Command("service", linux.name, "stop").Run(); err != nil { + return removeAction + failed, err + } + } + if err := os.Remove(linux.servicePath()); err != nil { return removeAction + failed, err } diff --git a/daemon_linux_upstart.go b/daemon_linux_upstart.go index 16216c7..be793a4 100644 --- a/daemon_linux_upstart.go +++ b/daemon_linux_upstart.go @@ -110,6 +110,12 @@ func (linux *upstartRecord) Remove() (string, error) { return removeAction + failed, ErrNotInstalled } + if _, ok := linux.checkRunning(); ok { + if err := exec.Command("stop", linux.name).Run(); err != nil { + return removeAction + failed, err + } + } + if err := os.Remove(linux.servicePath()); err != nil { return removeAction + failed, err } diff --git a/daemon_windows.go b/daemon_windows.go index 047b635..0e97d96 100644 --- a/daemon_windows.go +++ b/daemon_windows.go @@ -107,6 +107,9 @@ func (windows *windowsRecord) Remove() (string, error) { return removeAction + failed, getWindowsError(err) } defer s.Close() + if err := stopAndWait(s); err != nil { + return stopAction + failed, getWindowsError(err) + } err = s.Delete() if err != nil { return removeAction + failed, getWindowsError(err) From 32fd333f66e18e0e12e5e4e10b2996db819b781a Mon Sep 17 00:00:00 2001 From: AswinT22 Date: Thu, 10 Jun 2021 14:04:52 +0100 Subject: [PATCH 2/2] Update return --- daemon_windows.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon_windows.go b/daemon_windows.go index 0e97d96..fc38382 100644 --- a/daemon_windows.go +++ b/daemon_windows.go @@ -108,7 +108,7 @@ func (windows *windowsRecord) Remove() (string, error) { } defer s.Close() if err := stopAndWait(s); err != nil { - return stopAction + failed, getWindowsError(err) + return removeAction + failed, getWindowsError(err) } err = s.Delete() if err != nil {