@@ -156,20 +156,10 @@ const task_state_runnable = UInt8(0)
156156const task_state_done = UInt8 (1 )
157157const task_state_failed = UInt8 (2 )
158158
159- const _state_index = findfirst (== (:_state ), fieldnames (Task))
160- @eval function load_state_acquire (t)
161- # TODO : Replace this by proper atomic operations when available
162- @GC . preserve t llvmcall ($ ("""
163- %rv = load atomic i8, i8* %0 acquire, align 8
164- ret i8 %rv
165- """ ), UInt8, Tuple{Ptr{UInt8}},
166- Ptr {UInt8} (pointer_from_objref (t) + fieldoffset (Task, _state_index)))
167- end
168-
169159@inline function getproperty (t:: Task , field:: Symbol )
170160 if field === :state
171161 # TODO : this field name should be deprecated in 2.0
172- st = load_state_acquire (t)
162+ st = @atomic :acquire t . _state
173163 if st === task_state_runnable
174164 return :runnable
175165 elseif st === task_state_done
@@ -223,7 +213,7 @@ julia> istaskdone(b)
223213true
224214```
225215"""
226- istaskdone (t:: Task ) = load_state_acquire (t ) != = task_state_runnable
216+ istaskdone (t:: Task ) = ( @atomic :acquire t . _state ) != = task_state_runnable
227217
228218"""
229219 istaskstarted(t::Task) -> Bool
267257!!! compat "Julia 1.3"
268258 This function requires at least Julia 1.3.
269259"""
270- istaskfailed (t:: Task ) = (load_state_acquire (t ) === task_state_failed)
260+ istaskfailed (t:: Task ) = (( @atomic :acquire t . _state ) === task_state_failed)
271261
272262Threads. threadid (t:: Task ) = Int (ccall (:jl_get_task_tid , Int16, (Any,), t)+ 1 )
273263function Threads. threadpool (t:: Task )
0 commit comments