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
(4) |
2
(3) |
3
(7) |
4
(7) |
5
(6) |
6
(5) |
|
7
(21) |
8
(14) |
9
(8) |
10
(10) |
11
(7) |
12
(4) |
13
|
|
14
(3) |
15
(11) |
16
(4) |
17
|
18
|
19
|
20
|
|
21
(3) |
22
(4) |
23
(2) |
24
(3) |
25
|
26
(4) |
27
(2) |
|
28
(6) |
29
|
30
(2) |
31
(7) |
|
|
|
|
From: <sv...@va...> - 2010-03-06 19:39:06
|
Author: bart Date: 2010-03-06 19:38:56 +0000 (Sat, 06 Mar 2010) New Revision: 11066 Log: Updated Subversion ignore list. Modified: trunk/exp-bbv/tests/arm-linux/ Property changes on: trunk/exp-bbv/tests/arm-linux ___________________________________________________________________ Name: svn:ignore + .deps Makefile Makefile.in |
|
From: <sv...@va...> - 2010-03-06 10:55:07
|
Author: bart
Date: 2010-03-06 10:54:36 +0000 (Sat, 06 Mar 2010)
New Revision: 11065
Log:
Changes:
- Annotated the smart pointer implementation.
- Explained the purpose of the test via source code comments.
- Removed class Semaphore.
- Made it possible to specify the number of threads to be created via the
command line.
Modified:
trunk/drd/tests/annotate_smart_pointer.cpp
Modified: trunk/drd/tests/annotate_smart_pointer.cpp
===================================================================
--- trunk/drd/tests/annotate_smart_pointer.cpp 2010-03-05 10:11:41 UTC (rev 11064)
+++ trunk/drd/tests/annotate_smart_pointer.cpp 2010-03-06 10:54:36 UTC (rev 11065)
@@ -1,14 +1,45 @@
-#include <cassert>
-#include <iostream>
+/*
+ * Test program that illustrates how to annotate a smart pointer
+ * implementation. In a multithreaded program the following is relevant when
+ * working with smart pointers:
+ * - whether or not the objects pointed at are shared over threads.
+ * - whether or not the methods of the objects pointed at are thread-safe.
+ * - whether or not the smart pointer objects are shared over threads.
+ * - whether or not the smart pointer object itself is thread-safe.
+ *
+ * Most smart pointer implemenations are not thread-safe
+ * (e.g. boost::shared_ptr<>, tr1::shared_ptr<> and the smart_ptr<>
+ * implementation below). This means that it is not safe to modify a shared
+ * pointer object that is shared over threads without proper synchronization.
+ *
+ * Even for non-thread-safe smart pointers it is possible to have different
+ * threads access the same object via smart pointers without triggering data
+ * races on the smart pointer objects.
+ *
+ * A smart pointer implementation guarantees that the destructor of the object
+ * pointed at is invoked after the last smart pointer that points to that
+ * object has been destroyed or reset. Data race detection tools cannot detect
+ * this ordering without explicit annotation for smart pointers that track
+ * references without invoking synchronization operations recognized by data
+ * race detection tools.
+ */
+
+
+#include <cassert> // assert()
+#include <climits> // PTHREAD_STACK_MIN
+#include <iostream> // std::cout
+#include <stdlib.h> // atoi()
#ifdef _WIN32
-#include <process.h>
-#include <windows.h>
+#include <process.h> // _beginthreadex()
+#include <windows.h> // CRITICAL_SECTION
#else
-#include <pthread.h>
-#include <semaphore.h>
+#include <pthread.h> // pthread_mutex_t
#endif
+#include "../../drd/drd.h"
+
#ifdef _WIN32
+
class AtomicInt32
{
public:
@@ -37,22 +68,6 @@
CRITICAL_SECTION m_mutex;
};
-class Semaphore
-{
-public:
- Semaphore()
- : m_sem(CreateSemaphore(NULL, 0, 1, NULL))
- { assert(m_sem != INVALID_HANDLE_VALUE); }
- ~Semaphore()
- { CloseHandle(m_sem); }
- void Post() const
- { ReleaseSemaphore(m_sem, 1, NULL); }
- void Wait() const
- { WaitForSingleObject(m_sem, INFINITE); }
-private:
- const HANDLE m_sem;
-};
-
class Thread
{
public:
@@ -60,30 +75,33 @@
~Thread() { }
void Create(void* (*pf)(void*), void* arg)
{
- wrapper_args* wrapper_arg_p = new wrapper_args(pf, arg);
- m_thread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, wrapper, wrapper_arg_p, 0, NULL));
+ WrapperArgs* wrapper_arg_p = new WrapperArgs(pf, arg);
+ m_thread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, wrapper,
+ wrapper_arg_p, 0, NULL));
}
void Join()
{ WaitForSingleObject(m_thread, INFINITE); }
private:
- struct wrapper_args
+ struct WrapperArgs
{
- wrapper_args(void* (*pf)(void*), void* arg) : m_pf(pf), m_arg(arg) { }
+ WrapperArgs(void* (*pf)(void*), void* arg) : m_pf(pf), m_arg(arg) { }
void* (*m_pf)(void*);
void* m_arg;
};
static unsigned int __stdcall wrapper(void* arg)
{
- wrapper_args* wrapper_arg_p = reinterpret_cast<wrapper_args*>(arg);
- wrapper_args wa = *wrapper_arg_p;
+ WrapperArgs* wrapper_arg_p = reinterpret_cast<WrapperArgs*>(arg);
+ WrapperArgs wa = *wrapper_arg_p;
delete wrapper_arg_p;
return reinterpret_cast<unsigned>((wa.m_pf)(wa.m_arg));
}
HANDLE m_thread;
};
+
#else // _WIN32
+
class AtomicInt32
{
public:
@@ -111,36 +129,28 @@
pthread_mutex_t m_mutex;
};
-class Semaphore
-{
-public:
- Semaphore() : m_sem()
- { sem_init(&m_sem, 0, 0); }
- ~Semaphore()
- { sem_destroy(&m_sem); }
- void Post()
- { sem_post(&m_sem); }
- void Wait()
- { sem_wait(&m_sem); }
-private:
- sem_t m_sem;
-};
-
class Thread
{
public:
Thread() : m_tid() { }
~Thread() { }
void Create(void* (*pf)(void*), void* arg)
- { pthread_create(&m_tid, NULL, pf, arg); }
+ {
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + 4096);
+ pthread_create(&m_tid, &attr, pf, arg);
+ pthread_attr_destroy(&attr);
+ }
void Join()
{ pthread_join(m_tid, NULL); }
private:
pthread_t m_tid;
};
-#endif // _WIN32
+#endif // !defined(_WIN32)
+
template<class T>
class smart_ptr
{
@@ -220,10 +230,17 @@
{
if (m_ptr != pT)
{
- if (m_count_ptr && --(*m_count_ptr) == 0)
+ if (m_count_ptr)
{
- delete m_ptr;
- delete m_count_ptr;
+ ANNOTATE_HAPPENS_BEFORE(m_count_ptr);
+ if (--(*m_count_ptr) == 0)
+ {
+ ANNOTATE_HAPPENS_AFTER(m_count_ptr);
+ delete m_ptr;
+ m_ptr = NULL;
+ delete m_count_ptr;
+ m_count_ptr = NULL;
+ }
}
m_ptr = pT;
m_count_ptr = count_ptr;
@@ -241,10 +258,15 @@
public:
counter()
: m_mutex(), m_count()
+ { }
+ ~counter()
{
+ // Data race detection tools that do not recognize the
+ // ANNOTATE_HAPPENS_BEFORE() / ANNOTATE_HAPPENS_AFTER() annotations in the
+ // smart_ptr<> implementation will report that the assignment below
+ // triggers a data race.
+ m_count = -1;
}
- ~counter()
- { m_count = -1; }
int get() const
{
int result;
@@ -267,30 +289,31 @@
int m_count;
};
-static Semaphore* s_sem;
-
static void* thread_func(void* arg)
{
- smart_ptr<counter> p(*reinterpret_cast<smart_ptr<counter>*>(arg));
- s_sem->Post();
- p->post_increment();
- p = NULL;
+ smart_ptr<counter>* pp = reinterpret_cast<smart_ptr<counter>*>(arg);
+ (*pp)->post_increment();
+ *pp = NULL;
+ delete pp;
return NULL;
}
int main(int argc, char** argv)
{
smart_ptr<counter> p(new counter);
- Thread T;
+ const int nthreads = std::max(argc > 1 ? atoi(argv[1]) : 1, 1);
+ Thread T[nthreads];
- s_sem = new Semaphore();
p->post_increment();
- T.Create(thread_func, &p);
- // Wait until the created thread has copied the shared pointer.
- s_sem->Wait();
+ for (int i = 0; i < nthreads; ++i)
+ T[i].Create(thread_func, new smart_ptr<counter>(p));
p = NULL;
- T.Join();
- delete s_sem;
+ for (int i = 0; i < nthreads; ++i)
+ T[i].Join();
std::cout << "Done.\n";
return 0;
}
+
+// Local variables:
+// c-basic-offset: 2
+// End:
|
|
From: Bart V. A. <bar...@gm...> - 2010-03-06 08:56:20
|
Nightly build on cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2010-03-06 02:28:04 EST Ended at 2010-03-06 03:56:01 EST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 449 tests, 43 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) |
|
From: Tom H. <th...@cy...> - 2010-03-06 03:49:19
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2010-03-06 03:05:06 GMT Ended at 2010-03-06 03:49:03 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 531 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |
|
From: Tom H. <th...@cy...> - 2010-03-06 03:36:24
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2010-03-06 03:10:07 GMT Ended at 2010-03-06 03:36:08 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 538 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Mar 6 03:23:10 2010 --- new.short Sat Mar 6 03:36:08 2010 *************** *** 8,11 **** ! == 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) --- 8,10 ---- ! == 538 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |