Issue 87324
Summary CHECK failed: "((tctx->status)) == ((ThreadStatusInvalid))"
Labels new issue
Assignees
Reporter landell-xperi
    Clang version: 18.0.0

The following assertion is hit when using asan:
```
AddressSanitizer: CHECK failed: sanitizer_thread_registry.cpp:161 "((tctx->status)) == ((ThreadStatusInvalid))" (0xae0ee3a0, 0x0) (tid=2095999)
```
The value of the `tctx->status` field does not have any of the values in the related enum. Looks like a race condition since the the status value  passes the assertion just after the creation of the object but has changed when the assertion is actually triggered. The `QuarantinePop` function returns `nullptr` in this scenario. I have seen other but similar assertion failures (value is not in the enum range) in other parts of the related code but this is the most common that I can trigger.

Suspicion goes to the following commit: https://reviews.llvm.org/D158786
Looks like there was a local allocator used together with a local mutex. Then the allocator was changed to a global one while the same mutex is still used. I have reverted back to using the local allocator in the `GetAsanThreadContext` function and can no longer reproduce the issue.

I have not been able to create a minimal test case for this. It reproduces in a chromium derivative but I can't share the code unfortunately.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to