You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
1
(5) |
|
2
(2) |
3
(3) |
4
(2) |
5
(4) |
6
(4) |
7
(1) |
8
|
|
9
|
10
(1) |
11
|
12
(3) |
13
(2) |
14
(2) |
15
|
|
16
|
17
|
18
|
19
(2) |
20
(10) |
21
|
22
(6) |
|
23
(7) |
24
|
25
(2) |
26
|
27
(1) |
28
(8) |
29
(2) |
|
30
|
31
|
|
|
|
|
|
|
From: Mark W. <ma...@so...> - 2018-12-02 11:44:03
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=206e81e8add574bbb38c11105005decedabc2f4a commit 206e81e8add574bbb38c11105005decedabc2f4a Author: Mark Wielaard <ma...@kl...> Date: Sun Dec 2 12:39:27 2018 +0100 Fix tsan_unittest.cpp compile error with older compilers. Older compilers (g++ 4.8.5) don't like '>>': error: â>>â should be â> >â within a nested template argument list. Add an extra space. Diff: --- drd/tests/tsan_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drd/tests/tsan_unittest.cpp b/drd/tests/tsan_unittest.cpp index c504e9f..16fe837 100644 --- a/drd/tests/tsan_unittest.cpp +++ b/drd/tests/tsan_unittest.cpp @@ -7218,7 +7218,7 @@ bool NoElementsLeft(vector<int> *v) { } void WaitForAllThreadsToFinish_Good() { - mu.LockWhen(Condition<vector<int>>(NoElementsLeft, vec)); + mu.LockWhen(Condition<vector<int> >(NoElementsLeft, vec)); mu.Unlock(); // It is now safe to access vec w/o lock. |
|
From: Bart V. A. <bva...@so...> - 2018-12-02 06:06:08
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=65dcbc70db71a17b057637d1b01495ffeba2d967 commit 65dcbc70db71a17b057637d1b01495ffeba2d967 Author: Bart Van Assche <bva...@ac...> Date: Sat Dec 1 21:51:06 2018 -0800 drd/tests: Fix remaining gcc 8 compiler warnings Diff: --- drd/tests/tsan_thread_wrappers_pthread.h | 71 +++++++++++++++++++------------- drd/tests/tsan_unittest.cpp | 38 ++++++++--------- 2 files changed, 62 insertions(+), 47 deletions(-) diff --git a/drd/tests/tsan_thread_wrappers_pthread.h b/drd/tests/tsan_thread_wrappers_pthread.h index 7072fea..bdca574 100644 --- a/drd/tests/tsan_thread_wrappers_pthread.h +++ b/drd/tests/tsan_thread_wrappers_pthread.h @@ -156,22 +156,23 @@ class SpinLock { #endif // NO_SPINLOCK /// Just a boolean condition. Used by Mutex::LockWhen and similar. +template <typename T> class Condition { public: typedef bool (*func_t)(void*); - template <typename T> Condition(bool (*func)(T*), T* arg) - : func_(reinterpret_cast<func_t>(func)), arg_(arg) {} + : func1_(func), arg_(arg) {} Condition(bool (*func)()) - : func_(reinterpret_cast<func_t>(func)), arg_(NULL) {} + : func0_(func), arg_(NULL) {} - bool Eval() { return func_(arg_); } - private: - func_t func_; - void *arg_; + bool Eval() const { return func1_ ? func1_(arg_) : func0_(); } + private: + bool (*func0_)(); + bool (*func1_)(T*); + T *arg_; }; @@ -211,20 +212,27 @@ class Mutex { bool ReaderTryLock() { return TryLock();} void ReaderUnlock() { Unlock(); } - void LockWhen(Condition cond) { Lock(); WaitLoop(cond); } - void ReaderLockWhen(Condition cond) { Lock(); WaitLoop(cond); } - void Await(Condition cond) { WaitLoop(cond); } + template <typename T> + void LockWhen(const Condition<T>& cond) { Lock(); WaitLoop(cond); } + template <typename T> + void ReaderLockWhen(const Condition<T>& cond) { Lock(); WaitLoop(cond); } + template <typename T> + void Await(const Condition<T>& cond) { WaitLoop(cond); } - bool ReaderLockWhenWithTimeout(Condition cond, int millis) + template <typename T> + bool ReaderLockWhenWithTimeout(const Condition<T>& cond, int millis) { Lock(); return WaitLoopWithTimeout(cond, millis); } - bool LockWhenWithTimeout(Condition cond, int millis) + template <typename T> + bool LockWhenWithTimeout(const Condition<T>& cond, int millis) { Lock(); return WaitLoopWithTimeout(cond, millis); } - bool AwaitWithTimeout(Condition cond, int millis) + template <typename T> + bool AwaitWithTimeout(const Condition<T>& cond, int millis) { return WaitLoopWithTimeout(cond, millis); } private: - void WaitLoop(Condition cond) { + template <typename T> + void WaitLoop(const Condition<T>& cond) { signal_at_unlock_ = true; while(cond.Eval() == false) { pthread_cond_wait(&cv_, &mu_); @@ -232,7 +240,8 @@ class Mutex { ANNOTATE_CONDVAR_LOCK_WAIT(&cv_, &mu_); } - bool WaitLoopWithTimeout(Condition cond, int millis) { + template <typename T> + bool WaitLoopWithTimeout(const Condition<T>& cond, int millis) { struct timeval now; struct timespec timeout; int retcode = 0; @@ -341,28 +350,34 @@ class WriterLockScoped { // Scoped RWLock Locker/Unlocker /// Wrapper for pthread_create()/pthread_join(). class MyThread { public: - typedef void *(*worker_t)(void*); - - MyThread(worker_t worker, void *arg = NULL, const char *name = NULL) - :w_(worker), arg_(arg), name_(name) {} + MyThread(void* (*worker)(void *), void *arg = NULL, const char *name = NULL) + :wpvpv_(worker), arg_(arg), name_(name) {} MyThread(void (*worker)(void), void *arg = NULL, const char *name = NULL) - :w_(reinterpret_cast<worker_t>(worker)), arg_(arg), name_(name) {} + :wvv_(worker), arg_(arg), name_(name) {} MyThread(void (*worker)(void *), void *arg = NULL, const char *name = NULL) - :w_(reinterpret_cast<worker_t>(worker)), arg_(arg), name_(name) {} + :wvpv_(worker), arg_(arg), name_(name) {} - ~MyThread(){ w_ = NULL; arg_ = NULL;} - void Start() { CHECK(0 == pthread_create(&t_, NULL, (worker_t)ThreadBody, this));} + void Start() { CHECK(0 == pthread_create(&t_, NULL, ThreadBody, this));} void Join() { CHECK(0 == pthread_join(t_, NULL));} pthread_t tid() const { return t_; } private: - static void ThreadBody(MyThread *my_thread) { + static void *ThreadBody(void *arg) { + MyThread *my_thread = reinterpret_cast<MyThread*>(arg); if (my_thread->name_) { ANNOTATE_THREAD_NAME(my_thread->name_); } - my_thread->w_(my_thread->arg_); + if (my_thread->wpvpv_) + return my_thread->wpvpv_(my_thread->arg_); + if (my_thread->wpvpv_) + my_thread->wvpv_(my_thread->arg_); + if (my_thread->wvv_) + my_thread->wvv_(); + return NULL; } pthread_t t_; - worker_t w_; + void *(*wpvpv_)(void*); + void (*wvv_)(void); + void (*wvpv_)(void*); void *arg_; const char *name_; }; @@ -391,7 +406,7 @@ class ProducerConsumerQueue { // Get. // Blocks if the queue is empty. void *Get() { - mu_.LockWhen(Condition(IsQueueNotEmpty, &q_)); + mu_.LockWhen(Condition<typeof(q_)>(IsQueueNotEmpty, &q_)); void * item = NULL; bool ok = TryGetInternal(&item); CHECK(ok); @@ -578,7 +593,7 @@ class BlockingCounter { return count_ == 0; } void Wait() { - mu_.LockWhen(Condition(&IsZero, &count_)); + mu_.LockWhen(Condition<int>(&IsZero, &count_)); mu_.Unlock(); } private: diff --git a/drd/tests/tsan_unittest.cpp b/drd/tests/tsan_unittest.cpp index 79fea6b..c504e9f 100644 --- a/drd/tests/tsan_unittest.cpp +++ b/drd/tests/tsan_unittest.cpp @@ -437,7 +437,7 @@ void Waiter() { pool.StartWorkers(); COND = 0; pool.Add(NewCallback(Waker)); - MU.LockWhen(Condition(&ArgIsOne, &COND)); // calls ANNOTATE_CONDVAR_WAIT + MU.LockWhen(Condition<int>(&ArgIsOne, &COND)); // calls ANNOTATE_CONDVAR_WAIT MU.Unlock(); // Waker is done! GLOB = 2; @@ -621,7 +621,7 @@ void Waiter() { t.Start(); usleep(100000); // Make sure the signaller gets there first. - MU.LockWhen(Condition(&ArgIsTrue, &COND)); // calls ANNOTATE_CONDVAR_WAIT + MU.LockWhen(Condition<bool>(&ArgIsTrue, &COND));// calls ANNOTATE_CONDVAR_WAIT MU.Unlock(); // Signaller is done! GLOB = 2; // If LockWhen didn't catch the signal, a race may be reported here. @@ -866,7 +866,7 @@ void Waiter() { GLOB++; MU.Unlock(); - MU.LockWhen(Condition(&ArgIsOne, &COND)); + MU.LockWhen(Condition<int>(&ArgIsOne, &COND)); MU.Unlock(); GLOB++; } @@ -950,7 +950,7 @@ void Waker() { }; void Waiter() { - MU.LockWhen(Condition(&ArgIsOne, &COND)); + MU.LockWhen(Condition<int>(&ArgIsOne, &COND)); MU.Unlock(); CHECK(GLOB != 777); } @@ -1001,7 +1001,7 @@ void Worker() { MU2.Lock(); COND--; ANNOTATE_CONDVAR_SIGNAL(&MU2); - MU2.Await(Condition(&ArgIsZero, &COND)); + MU2.Await(Condition<int>(&ArgIsZero, &COND)); MU2.Unlock(); CHECK(GLOB == 2); @@ -1035,7 +1035,7 @@ void Worker() { MU2.Lock(); COND--; ANNOTATE_CONDVAR_SIGNAL(&MU2); - MU2.Await(Condition(&ArgIsZero, &COND)); + MU2.Await(Condition<int>(&ArgIsZero, &COND)); MU2.Unlock(); CHECK(GLOB == 3); @@ -1075,7 +1075,7 @@ void Waiter() { pool.Add(NewCallback(Waker)); MU.Lock(); - MU.Await(Condition(&ArgIsOne, &COND)); // calls ANNOTATE_CONDVAR_WAIT + MU.Await(Condition<int>(&ArgIsOne, &COND)); // calls ANNOTATE_CONDVAR_WAIT MU.Unlock(); // Waker is done! GLOB = 2; @@ -1108,7 +1108,7 @@ void Waiter() { pool.Add(NewCallback(Waker)); MU.Lock(); - CHECK(MU.AwaitWithTimeout(Condition(&ArgIsOne, &COND), INT_MAX)); + CHECK(MU.AwaitWithTimeout(Condition<int>(&ArgIsOne, &COND), INT_MAX)); MU.Unlock(); GLOB = 2; @@ -1137,7 +1137,7 @@ void Waiter() { pool.Add(NewCallback(Waker)); MU.Lock(); - CHECK(!MU.AwaitWithTimeout(Condition(&ArgIsOne, &COND), 100)); + CHECK(!MU.AwaitWithTimeout(Condition<int>(&ArgIsOne, &COND), 100)); MU.Unlock(); GLOB = 2; @@ -1167,7 +1167,7 @@ void Waiter() { COND = 0; pool.Add(NewCallback(Waker)); - CHECK(!MU.LockWhenWithTimeout(Condition(&ArgIsOne, &COND), 100)); + CHECK(!MU.LockWhenWithTimeout(Condition<int>(&ArgIsOne, &COND), 100)); MU.Unlock(); GLOB = 2; @@ -1300,7 +1300,7 @@ void Waiter() { pool.StartWorkers(); COND = 0; pool.Add(NewCallback(Waker)); - MU.ReaderLockWhen(Condition(&ArgIsOne, &COND)); + MU.ReaderLockWhen(Condition<int>(&ArgIsOne, &COND)); MU.ReaderUnlock(); GLOB = 2; @@ -1333,7 +1333,7 @@ void Waiter() { pool.StartWorkers(); COND = 0; pool.Add(NewCallback(Waker)); - CHECK(MU.ReaderLockWhenWithTimeout(Condition(&ArgIsOne, &COND), INT_MAX)); + CHECK(MU.ReaderLockWhenWithTimeout(Condition<int>(&ArgIsOne, &COND), INT_MAX)); MU.ReaderUnlock(); GLOB = 2; @@ -1361,7 +1361,7 @@ void Waiter() { pool.StartWorkers(); COND = 0; pool.Add(NewCallback(Waker)); - CHECK(!MU.ReaderLockWhenWithTimeout(Condition(&ArgIsOne, &COND), 100)); + CHECK(!MU.ReaderLockWhenWithTimeout(Condition<int>(&ArgIsOne, &COND), 100)); MU.ReaderUnlock(); GLOB = 2; @@ -4185,7 +4185,7 @@ struct B: A { // The race is here. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< printf("B::~B()\n"); // wait until flag_stopped is true. - mu.LockWhen(Condition(&ArgIsTrue, &flag_stopped)); + mu.LockWhen(Condition<bool>(&ArgIsTrue, &flag_stopped)); mu.Unlock(); printf("B::~B() done\n"); } @@ -4256,7 +4256,7 @@ struct B: A { // The race is here. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< printf("B::~B()\n"); // wait until flag_stopped is true. - mu.LockWhen(Condition(&ArgIsTrue, &flag_stopped)); + mu.LockWhen(Condition<bool>(&ArgIsTrue, &flag_stopped)); mu.Unlock(); printf("B::~B() done\n"); } @@ -4825,7 +4825,7 @@ Mutex mu; static void Thread1() { for (int i = 0; i < 100; i++) { - mu.LockWhenWithTimeout(Condition(&ArgIsTrue, &GLOB), 5); + mu.LockWhenWithTimeout(Condition<bool>(&ArgIsTrue, &GLOB), 5); GLOB = false; mu.Unlock(); usleep(10000); @@ -5338,7 +5338,7 @@ static bool ArgIsTrue(bool *arg) { void f1() { char some_stack[N]; write_to_p(some_stack, 1); - mu.LockWhen(Condition(&ArgIsTrue, &COND)); + mu.LockWhen(Condition<bool>(&ArgIsTrue, &COND)); mu.Unlock(); } @@ -6098,7 +6098,7 @@ bool WeirdCondition(int* param) { } void Waiter() { int param = 0; - MU.ReaderLockWhen(Condition(WeirdCondition, ¶m)); + MU.ReaderLockWhen(Condition<int>(WeirdCondition, ¶m)); MU.ReaderUnlock(); CHECK(GLOB > 0); CHECK(param > 0); @@ -7218,7 +7218,7 @@ bool NoElementsLeft(vector<int> *v) { } void WaitForAllThreadsToFinish_Good() { - mu.LockWhen(Condition(NoElementsLeft, vec)); + mu.LockWhen(Condition<vector<int>>(NoElementsLeft, vec)); mu.Unlock(); // It is now safe to access vec w/o lock. |