Open bnoordhuis opened 3 hours ago
Observation: if I take and release the mutex inside js_agent_sleep
, the warnings go away.
@saghul thoughts on whether that's a good idea or a bad idea? It doesn't materially affect run-test262 running time; it's around 20 seconds both ways for all of test262/test/built-ins/Atomics
real 0m20,143s
user 0m7,219s
sys 0m0,171s
And just Atomics.wait:
real 0m8,072s
user 0m2,609s
sys 0m0,140s
(pretty big wall-clock vs. CPU time difference)
I'll take a look! Shouldn't the unlock happen after the sleep?
I thought so too at first but I think it's really just acting as a fence / synchronization point and that's enough to make tsan happy.
I see. A quick look at https://github.com/google/sanitizers/wiki/ThreadSanitizerReportFormat suggests it might indeed be a false positive triggered by the mix of atomics and mutexes.
Suggestion: define CONFIG_AGENT (drop the define since it's now done always) in CMake when building the runner and only expose the mutex in quickjs.c in that case. An acompanying comment would also be nice.
I don't think that works: run-tes262 links against qjs, the static library target, so either the symbol is always exposed or never (and I don't want to build qjs twice because life's too short)
(Also, the no-CONFIG_AGENT build is broken. Might as well remove the define altogether.)
I'll include the patch from a few comments up and if you really hate it, you can always nack it :-)
I don't think that works: run-tes262 links against qjs, the static library target, so either the symbol is always exposed or never (and I don't want to build qjs twice because life's too short)
Ah true that. Let's land the change then.
(Also, the no-CONFIG_AGENT build is broken. Might as well remove the define altogether.)
Yeah, axe that too please :-)
axe that too please
Yes, I will in the "make run-test262 multi-threaded" PR. I'll be touching the agent code a great deal there anyway.
Yes, I will in the "make run-test262 multi-threaded" PR. I'll be touching the agent code a great deal there anyway.
Cool!
Tracking issue because I'm trying to add TSan support but I'm hitting a snag - it doesn't like how we implement JS atomics and that may or may not be a legitimate complaint:
:arrow_up: excerpt from running
build/run-test262 -c test262.conf -d test262/test/built-ins/Atomics/wait
I'm undecided if the
as if synchronized via sleep
warning is a red herring or not but the observation that we mix atomic ops and mutexes is legit.CMakeLists.txt diff: