diff options
author | David 'Digit' Turner <digit@google.com> | 2012-09-05 10:35:06 +0200 |
---|---|---|
committer | gerrit code review <noreply-gerritcodereview@google.com> | 2012-09-05 11:38:41 -0700 |
commit | e2126652a3a1e08724a54091793bb29a79d31014 (patch) | |
tree | a931f598a6a2dcd7bc449ca7167799a18b0b493d /subcmds/status.py | |
parent | 9a27d0111d5cf88c6b9409261707a5d7d50aaa64 (diff) | |
download | git-repo-e2126652a3a1e08724a54091793bb29a79d31014.tar.gz |
Make "repo sync -j<count>" stop properly on Ctrl-C.
The threaded 'repo sync' implementation would very often freeze the
process when interrupted by the user with Ctrl-C. The only solution
being to kill -9 the process explicitly from another terminal.
The reason for this is best explained here:
http://snakesthatbite.blogspot.fr/2010/09/cpython-threading-interrupting.html
This patch makes all helper sync threads 'daemon', which allows the
process to terminate immediately on Ctrl-C.
Note that this will forcefully kill all threads in case of interruption; this
is generally a bad thing, but:
1/ This is equivalent to calling kill -9 in another terminal, which
is the _only_ thing that can currently stop the process.
2/ There doesn't seem to be a way to tell the worker threads to
gently stop when they are in a blocking operation anyway (even
in the non-threaded case).
+ Do the same for "repo status -j<count>".
Change-Id: Ieaf45b0eacee36f35427f8edafd87415c2aa7be4
Diffstat (limited to 'subcmds/status.py')
-rw-r--r-- | subcmds/status.py | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/subcmds/status.py b/subcmds/status.py index 69e2dbfc..75d68ebc 100644 --- a/subcmds/status.py +++ b/subcmds/status.py | |||
@@ -122,6 +122,7 @@ the following meanings: | |||
122 | t = _threading.Thread(target=self._StatusHelper, | 122 | t = _threading.Thread(target=self._StatusHelper, |
123 | args=(project, counter, sem, output)) | 123 | args=(project, counter, sem, output)) |
124 | threads_and_output.append((t, output)) | 124 | threads_and_output.append((t, output)) |
125 | t.daemon = True | ||
125 | t.start() | 126 | t.start() |
126 | for (t, output) in threads_and_output: | 127 | for (t, output) in threads_and_output: |
127 | t.join() | 128 | t.join() |