Completed
Details
Assignee
UnassignedUnassignedReporter
importimportLabels
Approval
OkPatch
CodePriority
MinorAffects versions
Fix versions
Details
Details
Assignee
Unassigned
UnassignedReporter
import
importLabels
Approval
Ok
Patch
Code
Priority
Affects versions
Fix versions
Created October 23, 2012 at 12:43 AM
Updated October 25, 2013 at 10:03 PM
Resolved October 25, 2013 at 10:03 PM
If you make a function call indirectly by invoking a Var object (which derefs itself and invokes the result), the invocation parameters remain in the thread's local stack for the duration of the function call, even though they are needed only long enough to be passed into the deref'd function. As a result, passing a lazy seq into a function invoked in its Var form may run out of memory if the seq is forced inside that function. For example:
(defn total [xs] (reduce + 0 xs)) (total (range 1000000000)) ; this works, though takes a while (#'total (range 1000000000)) ; this dies with out of memory error
Solution: Similar to RestFn, wrap each argN in Var inside a Util.ret1(argN, argN = null).
Patch: var-clear-locals-patch-v2.diff
Screened by: Alex Miller