Completed
Details
Assignee
UnassignedUnassignedReporter
Greg ChapmanGreg ChapmanApproval
OkPatch
Code and TestPriority
MinorAffects versions
Fix versions
Details
Details
Assignee
Unassigned
UnassignedReporter
Greg Chapman
Greg ChapmanApproval
Ok
Patch
Code and Test
Priority
Affects versions
Fix versions
Created August 3, 2011 at 7:28 PM
Updated August 29, 2014 at 6:00 PM
Resolved August 29, 2014 at 6:00 PM
I'm not sure if this is a supported scenario, but the following deadlocks in Clojure 1.3:
(let [xs (seque (range 150000)) ys (seque (filter odd? xs))] (apply + ys))
Cause: As I understand it, the problem is that ys' fill takes place on an agent thread, so when it calls xs' drain, the
(send-off agt fill)
does not immediately trigger xs' fill, but is instead put on the nested list to be performed when ys' agent returns. Unfortunately, ys' fill will eventually block trying to take from xs, and so it never returns and the pending send-offs are never sent.Approach: Use (release-pending-sends) in seque's drain function to avoid the deadlock when a seque is fed into another seque.
Patch: clj-823-v1.patch
Screened by: Alex Miller