Skip to content

Commit 2a5d6c5

Browse files
authored
Fix promise leak when using streaming with long-running actors (#136)
1 parent 9f1eb4a commit 2a5d6c5

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

entities/src/main/scala/com/devsisters/shardcake/Sharding.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,12 @@ class Sharding private (
214214
})
215215

216216
private[shardcake] def initReply(id: String, replyChannel: ReplyChannel[Nothing]): UIO[Unit] =
217-
replyChannels.update(_.updated(id, replyChannel)) <*
218-
replyChannel.await.ensuring(replyChannels.update(_ - id)).forkDaemon
217+
replyChannels
218+
.getAndUpdate(_.updated(id, replyChannel))
219+
.flatMap(beforeReplyChannels =>
220+
replyChannel.await.ensuring(replyChannels.update(_ - id)).forkDaemon.unless(beforeReplyChannels.contains(id))
221+
)
222+
.unit
219223

220224
def reply[Reply](reply: Reply, replier: Replier[Reply]): UIO[Unit] =
221225
replyChannels

0 commit comments

Comments
 (0)