Skip to content

Commit 0b111d2

Browse files
authored
daemon: use Popen on Mac (#4296)
Turns out macs are not happy with double-forks without exec. Fixes #4294
1 parent b14ad4f commit 0b111d2

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

dvc/daemon.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import inspect
44
import logging
55
import os
6+
import platform
67
import sys
78
from subprocess import Popen
89

@@ -15,25 +16,24 @@
1516
DETACHED_PROCESS = 0x00000008
1617

1718

18-
def _spawn_windows(cmd, env):
19-
from subprocess import STARTUPINFO, STARTF_USESHOWWINDOW
20-
19+
def _popen(cmd, **kwargs):
2120
prefix = [sys.executable]
2221
if not is_binary():
2322
prefix += [sys.argv[0]]
2423

24+
return Popen(prefix + cmd, close_fds=True, shell=False, **kwargs)
25+
26+
27+
def _spawn_windows(cmd, env):
28+
from subprocess import STARTUPINFO, STARTF_USESHOWWINDOW
29+
2530
creationflags = CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS
2631

2732
startupinfo = STARTUPINFO()
2833
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
2934

30-
Popen(
31-
prefix + cmd,
32-
env=env,
33-
close_fds=True,
34-
shell=False,
35-
creationflags=creationflags,
36-
startupinfo=startupinfo,
35+
_popen(
36+
cmd, env=env, creationflags=creationflags, startupinfo=startupinfo,
3737
).communicate()
3838

3939

@@ -65,8 +65,13 @@ def _spawn_posix(cmd, env):
6565
sys.stdout.close()
6666
sys.stderr.close()
6767

68-
os.environ.update(env)
69-
main(cmd)
68+
if platform.system() == "Darwin":
69+
# workaround for MacOS bug
70+
# https://github.com/iterative/dvc/issues/4294
71+
_popen(cmd, env=env).communicate()
72+
else:
73+
os.environ.update(env)
74+
main(cmd)
7075

7176
os._exit(0) # pylint: disable=protected-access
7277

0 commit comments

Comments
 (0)