summaryrefslogtreecommitdiff
path: root/doc/todo/assistant_threaded_runtime.mdwn
diff options
context:
space:
mode:
Diffstat (limited to 'doc/todo/assistant_threaded_runtime.mdwn')
-rw-r--r--doc/todo/assistant_threaded_runtime.mdwn40
1 files changed, 0 insertions, 40 deletions
diff --git a/doc/todo/assistant_threaded_runtime.mdwn b/doc/todo/assistant_threaded_runtime.mdwn
deleted file mode 100644
index 03ba66acf..000000000
--- a/doc/todo/assistant_threaded_runtime.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-The [[design/assistant]] would be better if git-annex used ghc's threaded
-runtime (`ghc -threaded`).
-
-Currently, whenever the assistant code runs some external command, all
-threads are blocked waiting for it to finish.
-
-For transfers, the assistant works around this problem by forking separate
-upload processes, and not waiting on them until it sees an indication that
-they have finished the transfer. While this works, it's messy.. threaded
-would be better.
-
-When pulling, pushing, and merging, the assistant runs external git
-commands, and this does block all other threads. The threaded runtime would
-really help here.
-
-[[done]]; the assistant now builds with the threaded runtime.
-Some work still remains to run certian long-running external git commands
-in their own threads to prevent them blocking things, but that is easy to
-do, now. --[[Joey]]
-
----
-
-Currently, git-annex seems unstable when built with the threaded runtime.
-The test suite tends to hang when testing add. `git-annex` occasionally
-hangs, apparently in a futex lock. This is not the assistant hanging, and
-git-annex does not otherwise use threads, so this is surprising. --[[Joey]]
-
-> I've spent a lot of time debugging this, and trying to fix it, in the
-> "threaded" branch. There are still deadlocks. --[[Joey]]
-
->> Fixed, by switching from `System.Cmd.Utils` to `System.Process`
->> --[[Joey]]
-
----
-
-It would be possible to not use the threaded runtime. Instead, we could
-have a child process pool, with associated continuations to run after a
-child process finishes. Then periodically do a nonblocking waitpid on each
-process in the pool in turn (waiting for any child could break anything not
-using the pool!). This is probably a last resort...