diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-03-06 15:01:30 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-03-06 17:16:25 -0800 |
| commit | 513d956dce5be849b69d1b3b4b7aa5c0252fcc1f (patch) | |
| tree | 5943243f96d5b5893658c27a59c37bd5162b36d1 /src/rustdoc | |
| parent | dc0b9f44e2731dec413d69997ad093962deb665e (diff) | |
| download | rust-513d956dce5be849b69d1b3b4b7aa5c0252fcc1f.tar.gz rust-513d956dce5be849b69d1b3b4b7aa5c0252fcc1f.zip | |
rustdoc: Run pandoc in a way that won't deadlock waiting for IO
Diffstat (limited to 'src/rustdoc')
| -rw-r--r-- | src/rustdoc/markdown_writer.rs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/rustdoc/markdown_writer.rs b/src/rustdoc/markdown_writer.rs index b65ec03a884..c1a59453f88 100644 --- a/src/rustdoc/markdown_writer.rs +++ b/src/rustdoc/markdown_writer.rs @@ -101,12 +101,19 @@ fn pandoc_writer( os::close(pipe_err.out); os::close(pipe_in.out); - let stdout = result::get(task::try {|| - readclose(pipe_out.in) - }); - let stderr = result::get(task::try {|| - readclose(pipe_err.in) - }); + let stdout_po = comm::port(); + let stdout_ch = comm::chan(stdout_po); + task::spawn_sched(task::single_threaded) {|| + comm::send(stdout_ch, readclose(pipe_out.in)); + } + let stdout = comm::recv(stdout_po); + + let stderr_po = comm::port(); + let stderr_ch = comm::chan(stderr_po); + task::spawn_sched(task::single_threaded) {|| + comm::send(stderr_ch, readclose(pipe_err.in)); + } + let stderr = comm::recv(stderr_po); let status = run::waitpid(pid); #debug("pandoc result: %i", status); |
