-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Closed
Labels
bugIndicates an unexpected problem or unintended behaviorIndicates an unexpected problem or unintended behaviorgood first issueIndicates a good issue for first-time contributors to JuliaIndicates a good issue for first-time contributors to JuliamultithreadingBase.Threads and related functionalityBase.Threads and related functionalitytestsystemThe unit testing framework and Test stdlibThe unit testing framework and Test stdlib
Description
EDIT: changed to a much simpler example that shows the issue.
The @test_logs macro is not thread safe, if the code under test uses multiple threads:
julia> function foo(n)
@info "Doing foo with n=$n"
@sync for i=1:n
Threads.@spawn @info "Iteration $i"
end
42
end
foo (generic function with 1 method)
julia> for _ in 1:1000
@test_logs (:info,"Doing foo with n=10000") match_mode=:any foo(10_000)
end
julia+RAI(56155,0x1f5157ac0) malloc: double free for ptr 0x128248000
julia+RAI(56155,0x1f5157ac0) malloc: *** set a breakpoint in malloc_error_break to debug
[56155] signal (6): Abort trap: 6
in expression starting at REPL[8]:1
signal (6) thread (1) __pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 54370881 (Pool: 54363911; Big: 6970); GC: 119
[1] 56154 abort julia -tautoThis is definitely a bug, and should be fixed.
We see this showing up in our CI build farm from time to time.
The solution is almost certainly to make that vector thread-safe, by introducing a lock around it, and then copying the vector out before returning.
Metadata
Metadata
Assignees
Labels
bugIndicates an unexpected problem or unintended behaviorIndicates an unexpected problem or unintended behaviorgood first issueIndicates a good issue for first-time contributors to JuliaIndicates a good issue for first-time contributors to JuliamultithreadingBase.Threads and related functionalityBase.Threads and related functionalitytestsystemThe unit testing framework and Test stdlibThe unit testing framework and Test stdlib