about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/librustdoc/markdown_writer.rs38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/librustdoc/markdown_writer.rs b/src/librustdoc/markdown_writer.rs
index 193cf7be95e..7f4962cf1b7 100644
--- a/src/librustdoc/markdown_writer.rs
+++ b/src/librustdoc/markdown_writer.rs
@@ -101,19 +101,17 @@ fn pandoc_writer(
         os::close(pipe_err.out);
         os::close(pipe_in.out);
 
-        let stdout_po = comm::Port();
-        let stdout_ch = comm::Chan(&stdout_po);
-        do task::spawn_sched(task::SingleThreaded) {
-            comm::send(stdout_ch, readclose(pipe_out.in));
+        let (stdout_ch, stdout_po) = pipes::stream();
+        do task::spawn_sched(task::SingleThreaded) |move stdout_ch| {
+            stdout_ch.send(readclose(pipe_out.in));
         }
-        let stdout = comm::recv(stdout_po);
 
-        let stderr_po = comm::Port();
-        let stderr_ch = comm::Chan(&stderr_po);
-        do task::spawn_sched(task::SingleThreaded) {
-            comm::send(stderr_ch, readclose(pipe_err.in));
+        let (stderr_ch, stderr_po) = pipes::stream();
+        do task::spawn_sched(task::SingleThreaded) |move stderr_ch| {
+            stderr_ch.send(readclose(pipe_err.in));
         }
-        let stderr = comm::recv(stderr_po);
+        let stdout = stdout_po.recv();
+        let stderr = stderr_po.recv();
 
         let status = run::waitpid(pid);
         debug!("pandoc result: %i", status);
@@ -141,18 +139,23 @@ fn readclose(fd: libc::c_int) -> ~str {
 }
 
 fn generic_writer(+process: fn~(+markdown: ~str)) -> Writer {
-    let ch = do task::spawn_listener
-        |move process, po: comm::Port<WriteInstr>| {
+    let (setup_ch, setup_po) = pipes::stream();
+    do task::spawn |move process, move setup_ch| {
+        let po: comm::Port<WriteInstr> = comm::Port();
+        let ch = comm::Chan(&po);
+        setup_ch.send(ch);
+
         let mut markdown = ~"";
         let mut keep_going = true;
         while keep_going {
-            match comm::recv(po) {
+            match po.recv() {
               Write(s) => markdown += s,
               Done => keep_going = false
             }
         }
         process(move markdown);
     };
+    let ch = setup_po.recv();
 
     fn~(+instr: WriteInstr) {
         comm::send(ch, instr);
@@ -266,15 +269,14 @@ pub fn future_writer_factory(
     let markdown_po = comm::Port();
     let markdown_ch = comm::Chan(&markdown_po);
     let writer_factory = fn~(+page: doc::Page) -> Writer {
-        let writer_po = comm::Port();
-        let writer_ch = comm::Chan(&writer_po);
-        do task::spawn {
+        let (writer_ch, writer_po) = pipes::stream();
+        do task::spawn |move writer_ch| {
             let (writer, future) = future_writer();
-            comm::send(writer_ch, move writer);
+            writer_ch.send(move writer);
             let s = future::get(&future);
             comm::send(markdown_ch, (page, s));
         }
-        comm::recv(writer_po)
+        writer_po.recv()
     };
 
     (move writer_factory, markdown_po)