melver wrote:

> On a related note, do we emit `-Wthread-safety-negative` for reentrant locks? 
> I don't remember that we carved out an exception for that, and we probably 
> should.

We do - and it's deliberate on my part as I've been trying to indicate that 
there might be valid use cases for that. While conceptually contradictory, 
there might be cases where developers want to ensure a reentrant mutex is NOT 
held before entering a function.

I'll give you an example:
```
class Example {
  ReentrantMutex mu;
  ... 
    // Performs heavy I/O (write to file), blocking many seconds...
    void expensiveIO(..) REQUIRES(!mu);
};
```
While technically ok to enter expensiveIO() with the mutex held, it would 
prohibit forward-progress in other threads. This is a liveness bug, and 
negative capabilities can help catch such cases, too. While `EXCLUDES(..)` can 
also help, I do like negative capabilities for their strictness. Whether or not 
the developer is able to use a non-reentrant Mutex here is a different question 
- but e.g. more uncommon synchronization mechanisms like interrupt locking, 
preemption locking, or RCU fundamentally are reentrant.

I would like to account for OS kernel code needs, too (RCU also exists for user 
space).

https://github.com/llvm/llvm-project/pull/141599
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to