From e7a94a8790f0606cd1b0030c87af0b3b5af20965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20M=C3=BCller?= Date: Sun, 10 Dec 2023 20:06:37 +0100 Subject: [PATCH] Drop handleCompletion from CompletionGroup --- shared/src/main/scala/async/Async.scala | 9 +-------- shared/src/main/scala/async/Cancellable.scala | 6 ------ shared/src/main/scala/async/CompletionGroup.scala | 6 ++---- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/shared/src/main/scala/async/Async.scala b/shared/src/main/scala/async/Async.scala index 87fb45b6..a3c0c720 100644 --- a/shared/src/main/scala/async/Async.scala +++ b/shared/src/main/scala/async/Async.scala @@ -58,14 +58,7 @@ object Async: inline def current(using async: Async): Async = async def group[T](body: Async ?=> T)(using async: Async): T = - withNewCompletionGroup(CompletionGroup(async.group.handleCompletion).link())(body) - - def withCompletionHandler[T](handler: Cancellable => Async ?=> Unit)(body: Async ?=> T)(using async: Async): T = - val combined = (c: Cancellable) => - (async: Async) ?=> - handler(c) - async.group.handleCompletion(c) - withNewCompletionGroup(CompletionGroup(combined).link())(body) + withNewCompletionGroup(CompletionGroup().link())(body) /** Runs a body within another completion group. When the body returns, the group is cancelled and its completion * awaited with the `Unlinked` group. diff --git a/shared/src/main/scala/async/Cancellable.scala b/shared/src/main/scala/async/Cancellable.scala index 218385e8..59b3bf16 100644 --- a/shared/src/main/scala/async/Cancellable.scala +++ b/shared/src/main/scala/async/Cancellable.scala @@ -25,12 +25,6 @@ trait Cancellable: def unlink(): this.type = link(CompletionGroup.Unlinked) - /** Signal completion of this cancellable to its group. */ - def signalCompletion()(using Async): this.type = - this.group.handleCompletion(this) - this.unlink() - this - end Cancellable object Cancellable: diff --git a/shared/src/main/scala/async/CompletionGroup.scala b/shared/src/main/scala/async/CompletionGroup.scala index 760bf53f..3ed56767 100644 --- a/shared/src/main/scala/async/CompletionGroup.scala +++ b/shared/src/main/scala/async/CompletionGroup.scala @@ -5,10 +5,8 @@ import scala.util.Success /** A group of cancellable objects that are completed together. Cancelling the group means cancelling all its * uncompleted members. - * @param handleCompletion - * a function that gets applied to every member when it is completed or cancelled */ -class CompletionGroup(val handleCompletion: Cancellable => Async ?=> Unit = _ => {}) extends Cancellable.Tracking: +class CompletionGroup extends Cancellable.Tracking: private val members: mutable.Set[Cancellable] = mutable.Set() private var canceled: Boolean = false private var cancelWait: Option[Promise[Unit]] = None @@ -26,7 +24,7 @@ class CompletionGroup(val handleCompletion: Cancellable => Async ?=> Unit = _ => synchronized: if members.nonEmpty && cancelWait.isEmpty then cancelWait = Some(Promise()) cancelWait.foreach(cWait => cWait.future.await) - signalCompletion() + unlink() /** Add given member to the members set. If the group has already been cancelled, cancels that member immediately. */ def add(member: Cancellable): Unit =