about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-03-06 15:01:30 -0800
committerBrian Anderson <banderson@mozilla.com>2012-03-06 17:16:25 -0800
commit513d956dce5be849b69d1b3b4b7aa5c0252fcc1f (patch)
tree5943243f96d5b5893658c27a59c37bd5162b36d1 /src/rustdoc
parentdc0b9f44e2731dec413d69997ad093962deb665e (diff)
downloadrust-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.rs19
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);