update; split out hard todo
This commit is contained in:
parent
eb9063c0d1
commit
3247415c56
3 changed files with 42 additions and 16 deletions
29
doc/todo/threaded_runtime.mdwn
Normal file
29
doc/todo/threaded_runtime.mdwn
Normal file
|
@ -0,0 +1,29 @@
|
|||
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.
|
||||
|
||||
---
|
||||
|
||||
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]]
|
||||
|
||||
---
|
||||
|
||||
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...
|
Loading…
Add table
Add a link
Reference in a new issue