2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-22 10:58:55 +00:00

Merge pull request #3602 from cqjjjzr/fix-rclone-sigint

fix: rclone receiving SIGINT prematurely on Windows causing restic hang forever (#3601)
This commit is contained in:
MichaelEischer 2021-12-29 16:56:37 +01:00 committed by GitHub
commit e5985e0d63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View File

@ -0,0 +1,11 @@
Bugfix: Fix rclone backend prematurely exiting when receiving SIGINT on Windows
On Windows, Restic now start the rclone process detached from the
restic console (similar to starting processes on a new process
group on Linux). Therefore, when Ctrl+C is pressed on the console
where restic runs, restic could gracefully clean up using clone,
and rclone won't exit prematurely leading to restic hanging up with
"stdio pipes closed" errors.
https://github.com/restic/restic/issue/3601
https://github.com/restic/restic/pull/3602

View File

@ -2,12 +2,16 @@ package backend
import ( import (
"os/exec" "os/exec"
"syscall"
"github.com/restic/restic/internal/errors" "github.com/restic/restic/internal/errors"
"golang.org/x/sys/windows"
) )
func startForeground(cmd *exec.Cmd) (bg func() error, err error) { func startForeground(cmd *exec.Cmd) (bg func() error, err error) {
// just start the process and hope for the best // just start the process and hope for the best
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.CreationFlags = windows.DETACHED_PROCESS
err = cmd.Start() err = cmd.Start()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "cmd.Start") return nil, errors.Wrap(err, "cmd.Start")