Hi everybody, It looks like i found memory leak in a Task related code and fatal error. First, please look at this example: function leak() for i=1:10000 f = eval(:(function() produce() end)) t = @async f() consume(t) # stop the Task t.exception = null try yieldto(t) end end gc() end Every time i run leak() function, memory usage of juia process increases on ~35mb on my machine.
Second issue (with fatal error) is with the same code, but one simple change: function leak() for i=1:10000 f = eval(:(function() produce() end)) t = @async f() #consume(t) # this is a change # stop the Task t.exception = null try yieldto(t) end end gc() end This change produces an error like this: fatal: error thrown and no exception handler available. null rec_backtrace at /usr/bin/../lib/x86_64-linux-gnu/julia/libjulia.so (unknown line) jl_throw at /usr/bin/../lib/x86_64-linux-gnu/julia/libjulia.so (unknown line) unknown function (ip: 0x7fc9e946f372) yieldto at ./task.jl:71 jl_apply_generic at /usr/bin/../lib/x86_64-linux-gnu/julia/libjulia.so (unknown line) wait at ./task.jl:371 task_done_hook at task.jl:174 jl_apply_generic at /usr/bin/../lib/x86_64-linux-gnu/julia/libjulia.so (unknown line) unknown function (ip: 0x7fc9e946eb4a) unknown function (ip: (nil)) And finally, it works fine (without memory leaks) with this small change: function leak() for i=1:100000 # added one zero symbol at the end f = function() produce() end # removed eval() t = @async f() consume(t) # stop the Task t.exception = null try yieldto(t) end end gc() end So, my question is: what i should change to prevent memory leaks? Thanks julia> versioninfo() Julia Version 0.4.2 Commit bb73f34 (2015-12-06 21:47 UTC) Platform Info: System: Linux (x86_64-linux-gnu) CPU: Intel(R) Core(TM) i7-4700HQ CPU @ 2.40GHz WORD_SIZE: 64 BLAS: libopenblas (NO_LAPACK NO_LAPACKE DYNAMIC_ARCH NO_AFFINITY Haswell) LAPACK: liblapack.so.3 LIBM: libopenlibm LLVM: libLLVM-3.3