Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
6d47db31
Kaydet (Commit)
6d47db31
authored
Kas 27, 2011
tarafından
Jesus Cea
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Closes issue #13488: Some old preprocessors have problem with #define not in the first column
üst
d7c8fbf8
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
80 additions
and
80 deletions
+80
-80
dynamic_annotations.h
Include/dynamic_annotations.h
+80
-80
No files found.
Include/dynamic_annotations.h
Dosyayı görüntüle @
6d47db31
...
...
@@ -103,26 +103,26 @@
/* Report that wait on the condition variable at address "cv" has succeeded
and the lock at address "lock" is held. */
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \
AnnotateCondVarWait(__FILE__, __LINE__, cv, lock)
/* Report that wait on the condition variable at "cv" has succeeded. Variant
w/o lock. */
#define _Py_ANNOTATE_CONDVAR_WAIT(cv) \
#define _Py_ANNOTATE_CONDVAR_WAIT(cv) \
AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL)
/* Report that we are about to signal on the condition variable at address
"cv". */
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \
AnnotateCondVarSignal(__FILE__, __LINE__, cv)
/* Report that we are about to signal_all on the condition variable at "cv". */
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \
AnnotateCondVarSignalAll(__FILE__, __LINE__, cv)
/* Annotations for user-defined synchronization mechanisms. */
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj)
#define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj)
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj)
#define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj)
/* Report that the bytes in the range [pointer, pointer+size) are about
to be published safely. The race checker will create a happens-before
...
...
@@ -131,7 +131,7 @@
Note: this annotation may not work properly if the race detector uses
sampling, i.e. does not observe all memory accesses.
*/
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \
AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size)
/* Instruct the tool to create a happens-before arc between mu->Unlock() and
...
...
@@ -141,7 +141,7 @@
This annotation makes sense only for hybrid race detectors. For pure
happens-before detectors this is a no-op. For more details see
http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \
AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu)
/* -------------------------------------------------------------
...
...
@@ -152,7 +152,7 @@
This might be used when the memory has been retrieved from a free list and
is about to be reused, or when a the locking discipline for a variable
changes. */
#define _Py_ANNOTATE_NEW_MEMORY(address, size) \
#define _Py_ANNOTATE_NEW_MEMORY(address, size) \
AnnotateNewMemory(__FILE__, __LINE__, address, size)
/* -------------------------------------------------------------
...
...
@@ -164,20 +164,20 @@
be used only for FIFO queues. For non-FIFO queues use
_Py_ANNOTATE_HAPPENS_BEFORE (for put) and _Py_ANNOTATE_HAPPENS_AFTER (for
get). */
#define _Py_ANNOTATE_PCQ_CREATE(pcq) \
#define _Py_ANNOTATE_PCQ_CREATE(pcq) \
AnnotatePCQCreate(__FILE__, __LINE__, pcq)
/* Report that the queue at address "pcq" is about to be destroyed. */
#define _Py_ANNOTATE_PCQ_DESTROY(pcq) \
#define _Py_ANNOTATE_PCQ_DESTROY(pcq) \
AnnotatePCQDestroy(__FILE__, __LINE__, pcq)
/* Report that we are about to put an element into a FIFO queue at address
"pcq". */
#define _Py_ANNOTATE_PCQ_PUT(pcq) \
#define _Py_ANNOTATE_PCQ_PUT(pcq) \
AnnotatePCQPut(__FILE__, __LINE__, pcq)
/* Report that we've just got an element from a FIFO queue at address "pcq". */
#define _Py_ANNOTATE_PCQ_GET(pcq) \
#define _Py_ANNOTATE_PCQ_GET(pcq) \
AnnotatePCQGet(__FILE__, __LINE__, pcq)
/* -------------------------------------------------------------
...
...
@@ -189,13 +189,13 @@
"sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the
point where "pointer" has been allocated, preferably close to the point
where the race happens. See also _Py_ANNOTATE_BENIGN_RACE_STATIC. */
#define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \
#define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \
AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \
sizeof(*(pointer)), description)
/* Same as _Py_ANNOTATE_BENIGN_RACE(address, description), but applies to
the memory range [address, address+size). */
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \
AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description)
/* Request the analysis tool to ignore all reads in the current thread
...
...
@@ -203,30 +203,30 @@
Useful to ignore intentional racey reads, while still checking
other reads and all writes.
See also _Py_ANNOTATE_UNPROTECTED_READ. */
#define _Py_ANNOTATE_IGNORE_READS_BEGIN() \
#define _Py_ANNOTATE_IGNORE_READS_BEGIN() \
AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
/* Stop ignoring reads. */
#define _Py_ANNOTATE_IGNORE_READS_END() \
#define _Py_ANNOTATE_IGNORE_READS_END() \
AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
/* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \
AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
/* Stop ignoring writes. */
#define _Py_ANNOTATE_IGNORE_WRITES_END() \
#define _Py_ANNOTATE_IGNORE_WRITES_END() \
AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
/* Start ignoring all memory accesses (reads and writes). */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
do {\
_Py_ANNOTATE_IGNORE_READS_BEGIN();\
_Py_ANNOTATE_IGNORE_WRITES_BEGIN();\
}while(0)\
/* Stop ignoring all memory accesses. */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \
do {\
_Py_ANNOTATE_IGNORE_WRITES_END();\
_Py_ANNOTATE_IGNORE_READS_END();\
...
...
@@ -234,29 +234,29 @@
/* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events:
RWLOCK* and CONDVAR*. */
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \
AnnotateIgnoreSyncBegin(__FILE__, __LINE__)
/* Stop ignoring sync events. */
#define _Py_ANNOTATE_IGNORE_SYNC_END() \
#define _Py_ANNOTATE_IGNORE_SYNC_END() \
AnnotateIgnoreSyncEnd(__FILE__, __LINE__)
/* Enable (enable!=0) or disable (enable==0) race detection for all threads.
This annotation could be useful if you want to skip expensive race analysis
during some period of program execution, e.g. during initialization. */
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \
AnnotateEnableRaceDetection(__FILE__, __LINE__, enable)
/* -------------------------------------------------------------
Annotations useful for debugging. */
/* Request to trace every access to "address". */
#define _Py_ANNOTATE_TRACE_MEMORY(address) \
#define _Py_ANNOTATE_TRACE_MEMORY(address) \
AnnotateTraceMemory(__FILE__, __LINE__, address)
/* Report the current thread name to a race detector. */
#define _Py_ANNOTATE_THREAD_NAME(name) \
#define _Py_ANNOTATE_THREAD_NAME(name) \
AnnotateThreadName(__FILE__, __LINE__, name)
/* -------------------------------------------------------------
...
...
@@ -265,20 +265,20 @@
The "lock" argument is a pointer to the lock object. */
/* Report that a lock has been created at address "lock". */
#define _Py_ANNOTATE_RWLOCK_CREATE(lock) \
#define _Py_ANNOTATE_RWLOCK_CREATE(lock) \
AnnotateRWLockCreate(__FILE__, __LINE__, lock)
/* Report that the lock at address "lock" is about to be destroyed. */
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \
AnnotateRWLockDestroy(__FILE__, __LINE__, lock)
/* Report that the lock at address "lock" has been acquired.
is_w=1 for writer lock, is_w=0 for reader lock. */
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w)
/* Report that the lock at address "lock" is about to be released. */
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w)
/* -------------------------------------------------------------
...
...
@@ -289,20 +289,20 @@
/* Report that the "barrier" has been initialized with initial "count".
If 'reinitialization_allowed' is true, initialization is allowed to happen
multiple times w/o calling barrier_destroy() */
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \
AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \
reinitialization_allowed)
/* Report that we are about to enter barrier_wait("barrier"). */
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \
AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier)
/* Report that we just exited barrier_wait("barrier"). */
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \
AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier)
/* Report that the "barrier" has been destroyed. */
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \
AnnotateBarrierDestroy(__FILE__, __LINE__, barrier)
/* -------------------------------------------------------------
...
...
@@ -310,61 +310,61 @@
/* Report that we expect a race on the variable at "address".
Use only in unit tests for a race detector. */
#define _Py_ANNOTATE_EXPECT_RACE(address, description) \
#define _Py_ANNOTATE_EXPECT_RACE(address, description) \
AnnotateExpectRace(__FILE__, __LINE__, address, description)
/* A no-op. Insert where you like to test the interceptors. */
#define _Py_ANNOTATE_NO_OP(arg) \
#define _Py_ANNOTATE_NO_OP(arg) \
AnnotateNoOp(__FILE__, __LINE__, arg)
/* Force the race detector to flush its state. The actual effect depends on
* the implementation of the detector. */
#define _Py_ANNOTATE_FLUSH_STATE() \
#define _Py_ANNOTATE_FLUSH_STATE() \
AnnotateFlushState(__FILE__, __LINE__)
#else
/* DYNAMIC_ANNOTATIONS_ENABLED == 0 */
#define _Py_ANNOTATE_RWLOCK_CREATE(lock)
/* empty */
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock)
/* empty */
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w)
/* empty */
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w)
/* empty */
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed)
/* */
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier)
/* empty */
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier)
/* empty */
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier)
/* empty */
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock)
/* empty */
#define _Py_ANNOTATE_CONDVAR_WAIT(cv)
/* empty */
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv)
/* empty */
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv)
/* empty */
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj)
/* empty */
#define _Py_ANNOTATE_HAPPENS_AFTER(obj)
/* empty */
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_PCQ_CREATE(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_DESTROY(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_PUT(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_GET(pcq)
/* empty */
#define _Py_ANNOTATE_NEW_MEMORY(address, size)
/* empty */
#define _Py_ANNOTATE_EXPECT_RACE(address, description)
/* empty */
#define _Py_ANNOTATE_BENIGN_RACE(address, description)
/* empty */
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description)
/* empty */
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu)
/* empty */
#define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu)
/* empty */
#define _Py_ANNOTATE_TRACE_MEMORY(arg)
/* empty */
#define _Py_ANNOTATE_THREAD_NAME(name)
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_WRITES_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_SYNC_END()
/* empty */
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable)
/* empty */
#define _Py_ANNOTATE_NO_OP(arg)
/* empty */
#define _Py_ANNOTATE_FLUSH_STATE()
/* empty */
#define _Py_ANNOTATE_RWLOCK_CREATE(lock)
/* empty */
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock)
/* empty */
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w)
/* empty */
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w)
/* empty */
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed)
/* */
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier)
/* empty */
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier)
/* empty */
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier)
/* empty */
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock)
/* empty */
#define _Py_ANNOTATE_CONDVAR_WAIT(cv)
/* empty */
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv)
/* empty */
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv)
/* empty */
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj)
/* empty */
#define _Py_ANNOTATE_HAPPENS_AFTER(obj)
/* empty */
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size)
/* empty */
#define _Py_ANNOTATE_PCQ_CREATE(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_DESTROY(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_PUT(pcq)
/* empty */
#define _Py_ANNOTATE_PCQ_GET(pcq)
/* empty */
#define _Py_ANNOTATE_NEW_MEMORY(address, size)
/* empty */
#define _Py_ANNOTATE_EXPECT_RACE(address, description)
/* empty */
#define _Py_ANNOTATE_BENIGN_RACE(address, description)
/* empty */
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description)
/* empty */
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu)
/* empty */
#define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu)
/* empty */
#define _Py_ANNOTATE_TRACE_MEMORY(arg)
/* empty */
#define _Py_ANNOTATE_THREAD_NAME(name)
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_WRITES_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END()
/* empty */
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN()
/* empty */
#define _Py_ANNOTATE_IGNORE_SYNC_END()
/* empty */
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable)
/* empty */
#define _Py_ANNOTATE_NO_OP(arg)
/* empty */
#define _Py_ANNOTATE_FLUSH_STATE()
/* empty */
#endif
/* DYNAMIC_ANNOTATIONS_ENABLED */
...
...
@@ -477,7 +477,7 @@ int RunningOnValgrind(void);
return
res
;
}
/* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
namespace { \
class static_var ## _annotator { \
public: \
...
...
@@ -491,8 +491,8 @@ int RunningOnValgrind(void);
}
#else
/* DYNAMIC_ANNOTATIONS_ENABLED == 0 */
#define _Py_ANNOTATE_UNPROTECTED_READ(x) (x)
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description)
/* empty */
#define _Py_ANNOTATE_UNPROTECTED_READ(x) (x)
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description)
/* empty */
#endif
/* DYNAMIC_ANNOTATIONS_ENABLED */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment