src/Pure/Concurrent/consumer_thread.scala
changeset 74251 e6f1990c4d34
parent 74140 8a5e02ef975c
child 74252 3300847d75ae
equal deleted inserted replaced
74250:cbbd08df65bd 74251:e6f1990c4d34
    96         val (results, continue) = consume(reqs.map(_.arg))
    96         val (results, continue) = consume(reqs.map(_.arg))
    97 
    97 
    98         for { (Some(req), Some(res)) <- reqs.map(Some(_)).zipAll(results.map(Some(_)), None, None) }
    98         for { (Some(req), Some(res)) <- reqs.map(Some(_)).zipAll(results.map(Some(_)), None, None) }
    99         {
    99         {
   100           (req.ack, res) match {
   100           (req.ack, res) match {
   101             case ((Some(a), _)) => a.change(_ => Some(res))
   101             case (Some(a), _) => a.change(_ => Some(res))
   102             case ((None, Exn.Res(_))) =>
   102             case (None, Exn.Res(_)) =>
   103             case ((None, Exn.Exn(exn))) => failure(exn)
   103             case (None, Exn.Exn(exn)) => failure(exn)
   104           }
   104           }
   105         }
   105         }
   106 
   106 
   107         if (continue) main_loop(msgs.drop(reqs.length))
   107         if (continue) main_loop(msgs.drop(reqs.length))
   108         else robust_finish()
   108         else robust_finish()