[clang] [clang][analyzer][NFC] Improve docs of alpha.unix.BlockInCriticalSection (PR #93812)
Endre Fülöp via cfe-commits
cfe-commits at lists.llvm.org
Thu May 30 05:17:10 PDT 2024
https://github.com/gamesh411 created https://github.com/llvm/llvm-project/pull/93812
- Enhanced descriptions for blocking and critical section functions
- Added an additional code sample highlighting interleaved C and C++
style mutexes
- Introduced a new section on limitations
>From 8cb24070e2c0770d7d5a8e51aa364c6712ac5d1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Endre=20F=C3=BCl=C3=B6p?= <endre.fulop at sigmatechnology.com>
Date: Tue, 28 May 2024 23:13:07 +0200
Subject: [PATCH] [clang][analyzer][NFC] Improve docs of
alpha.unix.BlockInCriticalSection
- Enhanced descriptions for blocking and critical section functions
- Added an additional code sample highlighting interleaved C and C++
style mutexes
- Introduced a new section on limitations
---
clang/docs/analyzer/checkers.rst | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/clang/docs/analyzer/checkers.rst b/clang/docs/analyzer/checkers.rst
index 3a31708a1e9de..58adc0e62173a 100644
--- a/clang/docs/analyzer/checkers.rst
+++ b/clang/docs/analyzer/checkers.rst
@@ -3135,19 +3135,33 @@ alpha.unix
alpha.unix.BlockInCriticalSection (C)
"""""""""""""""""""""""""""""""""""""
Check for calls to blocking functions inside a critical section.
-Applies to: ``lock, unlock, sleep, getc, fgets, read, recv, pthread_mutex_lock,``
-`` pthread_mutex_unlock, mtx_lock, mtx_timedlock, mtx_trylock, mtx_unlock, lock_guard, unique_lock``
+Blocking functions detected by this checker: ``sleep, getc, fgets, read, recv``.
+Critical section handling functions modelled by this checker: ``lock, unlock, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, mtx_lock, mtx_timedlock, mtx_trylock, mtx_unlock, lock_guard, unique_lock``.
.. code-block:: c
- void test() {
- std::mutex m;
- m.lock();
- sleep(3); // warn: a blocking function sleep is called inside a critical
- // section
- m.unlock();
+ void pthread_lock_example(pthread_mutex_t *m) {
+ pthread_mutex_lock(m); // note: entering critical section here
+ sleep(10); // warn: Call to blocking function 'sleep' inside of critical section
+ pthread_mutex_unlock(m);
+ }
+
+.. code-block:: cpp
+
+ void overlapping_critical_sections(mtx_t *m1, std::mutex &m2) {
+ std::lock_guard lg{m2}; // note: entering critical section here
+ mtx_lock(m1); // note: entering critical section here
+ sleep(10); // warn: Call to blocking function 'sleep' inside of critical section
+ mtx_unlock(m1);
+ sleep(10); // warn: Call to blocking function 'sleep' inside of critical section
+ // still inside of the critical section of the std::lock_guard
}
+**Limitations**
+
+* The ``trylock`` and ``timedlock`` versions of acquiring locks are currently handled as if they always succeeded.
+ This can lead to false positives.
+
.. _alpha-unix-Chroot:
alpha.unix.Chroot (C)
More information about the cfe-commits
mailing list