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
(4) |
3
(8) |
4
(11) |
5
(23) |
|
6
(14) |
7
(17) |
8
(10) |
9
(8) |
10
(13) |
11
(10) |
12
(15) |
|
13
(12) |
14
(8) |
15
(15) |
16
(10) |
17
(19) |
18
(10) |
19
(5) |
|
20
(9) |
21
(8) |
22
(7) |
23
(4) |
24
(15) |
25
(6) |
26
(11) |
|
27
(5) |
28
(11) |
29
(9) |
30
(9) |
31
(4) |
|
|
|
From: Christian B. <bor...@de...> - 2011-03-22 21:35:11
|
Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z10 (s390x) ) Started at 2011-03-22 22:10:01 CET Ended at 2011-03-22 22:34:56 CET 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 == 457 tests, 6 stderr failures, 0 stdout failures, 0 post failures == none/tests/faultstatus (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/tc04_free_lock (stderr) drd/tests/tc09_bad_unlock (stderr) drd/tests/tc23_bogus_condwait (stderr) |
|
From: Christian B. <bor...@de...> - 2011-03-22 21:29:35
|
Nightly build on fedora390 ( Fedora 13/14/15 mix with gcc 3.5.3 on z196 (s390x) ) Started at 2011-03-22 22:10:01 CET Ended at 2011-03-22 22:28:18 CET 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 == 441 tests, 10 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/annotate_spinlock (stderr) drd/tests/sem_open (stderr) drd/tests/sem_open2 (stderr) drd/tests/sem_open3 (stderr) drd/tests/sem_open_traced (stderr) drd/tests/tc04_free_lock (stderr) drd/tests/tc09_bad_unlock (stderr) drd/tests/tc23_bogus_condwait (stderr) |
|
From: Konstantin S. <kon...@gm...> - 2011-03-22 19:18:48
|
nice! On Tue, Mar 22, 2011 at 7:34 PM, Julian Seward <js...@ac...> wrote: > > On 64 bit platforms it's free in both space and time. > > On 32 bit platforms it's free in time but adds some > space overhead (20% ish) to the history mechanism that > records older (conflicting) accesses. The amount of > space used by the conflicting access info is limited > by default to around 100MB by throwing away older info, > so it's not a big deal. > > J > > > On Monday, March 21, 2011, Konstantin Serebryany wrote: >> Cool! >> Is this for free, or it adds a non-zero overhead? >> >> --kcc >> >> On Sun, Mar 20, 2011 at 11:50 PM, <sv...@va...> wrote: >> > Author: sewardj >> > Date: 2011-03-20 20:50:54 +0000 (Sun, 20 Mar 2011) >> > New Revision: 11659 >> > >> > Log: >> > Add the ability to show the set of locks shown by each thread in a >> > race, which makes diagnosing races a lot easier. As a side effect, >> > change the way errors are printed to more clearly delimit the >> > boundaries of errors. > |
|
From: <sv...@va...> - 2011-03-22 16:51:46
|
Author: sewardj
Date: 2011-03-22 16:51:38 +0000 (Tue, 22 Mar 2011)
New Revision: 2112
Log:
Emit Ain_Imm64 (64-bit immediate constant loads to register) using a
short form when the immediate is < 2^20. Gives a 3% code size
reduction for Helgrind with --ignore-stack-refs=yes.
Modified:
trunk/priv/host_amd64_defs.c
Modified: trunk/priv/host_amd64_defs.c
===================================================================
--- trunk/priv/host_amd64_defs.c 2011-03-15 12:41:30 UTC (rev 2111)
+++ trunk/priv/host_amd64_defs.c 2011-03-22 16:51:38 UTC (rev 2112)
@@ -2325,9 +2325,20 @@
switch (i->tag) {
case Ain_Imm64:
- *p++ = toUChar(0x48 + (1 & iregBit3(i->Ain.Imm64.dst)));
- *p++ = toUChar(0xB8 + iregBits210(i->Ain.Imm64.dst));
- p = emit64(p, i->Ain.Imm64.imm64);
+ if (i->Ain.Imm64.imm64 <= 0xFFFFFULL) {
+ /* Use the short form (load into 32 bit reg, + default
+ widening rule) for constants under 1 million. We could
+ use this form for the range 0 to 0x7FFFFFFF inclusive, but
+ limit it to a smaller range for verifiability purposes. */
+ if (1 & iregBit3(i->Ain.Imm64.dst))
+ *p++ = 0x41;
+ *p++ = 0xB8 + iregBits210(i->Ain.Imm64.dst);
+ p = emit32(p, (UInt)i->Ain.Imm64.imm64);
+ } else {
+ *p++ = toUChar(0x48 + (1 & iregBit3(i->Ain.Imm64.dst)));
+ *p++ = toUChar(0xB8 + iregBits210(i->Ain.Imm64.dst));
+ p = emit64(p, i->Ain.Imm64.imm64);
+ }
goto done;
case Ain_Alu64R:
@@ -2335,7 +2346,7 @@
if (i->Ain.Alu64R.op == Aalu_MOV) {
switch (i->Ain.Alu64R.src->tag) {
case Armi_Imm:
- if (0 == (i->Ain.Alu64R.src->Armi.Imm.imm32 & ~0xFFF)) {
+ if (0 == (i->Ain.Alu64R.src->Armi.Imm.imm32 & ~0xFFFFF)) {
/* Actually we could use this form for constants in
the range 0 through 0x7FFFFFFF inclusive, but
limit it to a small range for verifiability
|
|
From: <sv...@va...> - 2011-03-22 16:49:37
|
Author: sewardj
Date: 2011-03-22 16:49:25 +0000 (Tue, 22 Mar 2011)
New Revision: 11661
Log:
Add the ability to optionally skip race checks on stack memory
accesses. Controlled by --check-stack-refs=no|yes [yes].
Modified:
branches/HGDEV2/helgrind/hg_basics.c
branches/HGDEV2/helgrind/hg_basics.h
branches/HGDEV2/helgrind/hg_main.c
Modified: branches/HGDEV2/helgrind/hg_basics.c
===================================================================
--- branches/HGDEV2/helgrind/hg_basics.c 2011-03-22 16:47:35 UTC (rev 11660)
+++ branches/HGDEV2/helgrind/hg_basics.c 2011-03-22 16:49:25 UTC (rev 11661)
@@ -84,6 +84,8 @@
UWord HG_(clo_vts_pruning) = 1;
+Bool HG_(clo_check_stack_refs) = True;
+
/*--------------------------------------------------------------------*/
/*--- end hg_basics.c ---*/
/*--------------------------------------------------------------------*/
Modified: branches/HGDEV2/helgrind/hg_basics.h
===================================================================
--- branches/HGDEV2/helgrind/hg_basics.h 2011-03-22 16:47:35 UTC (rev 11660)
+++ branches/HGDEV2/helgrind/hg_basics.h 2011-03-22 16:49:25 UTC (rev 11661)
@@ -122,6 +122,9 @@
mostly a big time waster, but minimises space use. */
extern UWord HG_(clo_vts_pruning);
+/* When False, race checking ignores memory references which are to
+ the stack, which speeds things up a bit. Default: True. */
+extern Bool HG_(clo_check_stack_refs);
#endif /* ! __HG_BASICS_H */
Modified: branches/HGDEV2/helgrind/hg_main.c
===================================================================
--- branches/HGDEV2/helgrind/hg_main.c 2011-03-22 16:47:35 UTC (rev 11660)
+++ branches/HGDEV2/helgrind/hg_main.c 2011-03-22 16:49:25 UTC (rev 11661)
@@ -3927,11 +3927,18 @@
/*--- Instrumentation ---*/
/*--------------------------------------------------------------*/
-static void instrument_mem_access ( IRSB* bbOut,
+#define binop(_op, _arg1, _arg2) IRExpr_Binop((_op),(_arg1),(_arg2))
+#define mkexpr(_tmp) IRExpr_RdTmp((_tmp))
+#define mkU32(_n) IRExpr_Const(IRConst_U32(_n))
+#define mkU64(_n) IRExpr_Const(IRConst_U64(_n))
+#define assign(_t, _e) IRStmt_WrTmp((_t), (_e))
+
+static void instrument_mem_access ( IRSB* sbOut,
IRExpr* addr,
Int szB,
Bool isStore,
- Int hWordTy_szB )
+ Int hWordTy_szB,
+ Int goff_sp )
{
IRType tyAddr = Ity_INVALID;
HChar* hName = NULL;
@@ -3940,10 +3947,15 @@
IRExpr** argv = NULL;
IRDirty* di = NULL;
+ // THRESH is the size of the window above SP (well,
+ // mostly above) that we assume implies a stack reference.
+ const Int THRESH = 4096 * 4; // somewhat arbitrary
+ const Int rz_szB = VG_STACK_REDZONE_SZB;
+
tl_assert(isIRAtom(addr));
tl_assert(hWordTy_szB == 4 || hWordTy_szB == 8);
- tyAddr = typeOfIRExpr( bbOut->tyenv, addr );
+ tyAddr = typeOfIRExpr( sbOut->tyenv, addr );
tl_assert(tyAddr == Ity_I32 || tyAddr == Ity_I64);
/* So the effective address is in 'addr' now. */
@@ -4010,14 +4022,71 @@
}
}
- /* Add the helper. */
+ /* Create the helper. */
tl_assert(hName);
tl_assert(hAddr);
tl_assert(argv);
di = unsafeIRDirty_0_N( regparms,
hName, VG_(fnptr_to_fnentry)( hAddr ),
argv );
- addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
+
+ if (! HG_(clo_check_stack_refs)) {
+ /* We're ignoring memory references which are (obviously) to the
+ stack. In fact just skip stack refs that are within 4 pages
+ of SP (SP - the redzone, really), as that's simple, easy, and
+ filters out most stack references. */
+ /* Generate the guard condition: "(addr - (SP - RZ)) >u N", for
+ some arbitrary N. If that is true then addr is outside the
+ range (SP - RZ .. SP + N - RZ). If N is smallish (a few
+ pages) then we can say addr is within a few pages of SP and
+ so can't possibly be a heap access, and so can be skipped.
+
+ Note that the condition simplifies to
+ (addr - SP + RZ) >u N
+ which generates better code in x86/amd64 backends, but it does
+ not unfortunately simplify to
+ (addr - SP) >u (N - RZ)
+ (would be beneficial because N - RZ is a constant) because
+ wraparound arithmetic messes up the comparison. eg.
+ 20 >u 10 == True,
+ but (20 - 15) >u (10 - 15) == 5 >u (MAXINT-5) == False.
+ */
+ IRTemp sp = newIRTemp(sbOut->tyenv, tyAddr);
+ addStmtToIRSB( sbOut, assign(sp, IRExpr_Get(goff_sp, tyAddr)));
+
+ /* "addr - SP" */
+ IRTemp addr_minus_sp = newIRTemp(sbOut->tyenv, tyAddr);
+ addStmtToIRSB(
+ sbOut,
+ assign(addr_minus_sp,
+ tyAddr == Ity_I32
+ ? binop(Iop_Sub32, addr, mkexpr(sp))
+ : binop(Iop_Sub64, addr, mkexpr(sp)))
+ );
+
+ /* "addr - SP + RZ" */
+ IRTemp diff = newIRTemp(sbOut->tyenv, tyAddr);
+ addStmtToIRSB(
+ sbOut,
+ assign(diff,
+ tyAddr == Ity_I32
+ ? binop(Iop_Add32, mkexpr(addr_minus_sp), mkU32(rz_szB))
+ : binop(Iop_Add64, mkexpr(addr_minus_sp), mkU64(rz_szB)))
+ );
+
+ IRTemp guard = newIRTemp(sbOut->tyenv, Ity_I1);
+ addStmtToIRSB(
+ sbOut,
+ assign(guard,
+ tyAddr == Ity_I32
+ ? binop(Iop_CmpLT32U, mkU32(THRESH), mkexpr(diff))
+ : binop(Iop_CmpLT64U, mkU64(THRESH), mkexpr(diff)))
+ );
+ di->guard = mkexpr(guard);
+ }
+
+ /* Add the helper. */
+ addStmtToIRSB( sbOut, IRStmt_Dirty(di) );
}
@@ -4065,6 +4134,8 @@
Bool inLDSO = False;
Addr64 inLDSOmask4K = 1; /* mismatches on first check */
+ const Int goff_sp = layout->offset_SP;
+
if (gWordTy != hWordTy) {
/* We don't currently support this case. */
VG_(tool_panic)("host/guest word size mismatch");
@@ -4156,7 +4227,7 @@
(isDCAS ? 2 : 1)
* sizeofIRType(typeOfIRExpr(bbIn->tyenv, cas->dataLo)),
False/*!isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
break;
@@ -4176,7 +4247,7 @@
st->Ist.LLSC.addr,
sizeofIRType(dataTy),
False/*!isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
} else {
@@ -4195,7 +4266,7 @@
st->Ist.Store.addr,
sizeofIRType(typeOfIRExpr(bbIn->tyenv, st->Ist.Store.data)),
True/*isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
break;
@@ -4211,7 +4282,7 @@
data->Iex.Load.addr,
sizeofIRType(data->Iex.Load.ty),
False/*!isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
}
@@ -4231,7 +4302,7 @@
if (!inLDSO) {
instrument_mem_access(
bbOut, d->mAddr, dataSize, False/*!isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
}
@@ -4239,7 +4310,7 @@
if (!inLDSO) {
instrument_mem_access(
bbOut, d->mAddr, dataSize, True/*isStore*/,
- sizeofIRType(hWordTy)
+ sizeofIRType(hWordTy), goff_sp
);
}
}
@@ -4263,7 +4334,13 @@
return bbOut;
}
+#undef binop
+#undef mkexpr
+#undef mkU32
+#undef mkU64
+#undef assign
+
/*----------------------------------------------------------------*/
/*--- Client requests ---*/
/*----------------------------------------------------------------*/
@@ -4654,6 +4731,9 @@
else if VG_XACT_CLO(arg, "--vts-pruning=always",
HG_(clo_vts_pruning), 2);
+ else if VG_BOOL_CLO(arg, "--check-stack-refs",
+ HG_(clo_check_stack_refs)) {}
+
else
return VG_(replacement_malloc_process_cmd_line_option)(arg);
@@ -4670,6 +4750,8 @@
" approx: full trace for one thread, approx for the other (faster)\n"
" none: only show trace for one thread in a race (fastest)\n"
" --conflict-cache-size=N size of 'full' history cache [1000000]\n"
+" --check-stack-refs=no|yes race-check reads and writes on the\n"
+" main stack and thread stacks? [yes]\n"
);
}
|
|
From: <sv...@va...> - 2011-03-22 16:47:43
|
Author: sewardj
Date: 2011-03-22 16:47:35 +0000 (Tue, 22 Mar 2011)
New Revision: 11660
Log:
Print data addresses in race error reports in capital hex (0xABC)
rather than lowercase (0xabc) as the former is easier to read and also
is consistent with the rest of hex number printing in error messages.
Modified:
branches/HGDEV2/helgrind/hg_errors.c
Modified: branches/HGDEV2/helgrind/hg_errors.c
===================================================================
--- branches/HGDEV2/helgrind/hg_errors.c 2011-03-20 20:50:54 UTC (rev 11659)
+++ branches/HGDEV2/helgrind/hg_errors.c 2011-03-22 16:47:35 UTC (rev 11660)
@@ -1178,8 +1178,8 @@
emit( " <kind>Race</kind>\n" );
emit( " <xwhat>\n" );
emit( " <text>Possible data race during %s of size %d "
- "at %#lx by thread #%d</text>\n",
- what, szB, err_ga, (Int)xe->XE.Race.thr->errmsg_index );
+ "at %p by thread #%d</text>\n",
+ what, szB, (void*)err_ga, (Int)xe->XE.Race.thr->errmsg_index );
emit( " <hthreadid>%d</hthreadid>\n",
(Int)xe->XE.Race.thr->errmsg_index );
emit( " </xwhat>\n" );
@@ -1227,8 +1227,8 @@
xe->XE.Race.h2_ct_locksHeldW );
emit( "Possible data race during %s of size %d "
- "at %#lx by thread #%d\n",
- what, szB, err_ga, (Int)xe->XE.Race.thr->errmsg_index );
+ "at %p by thread #%d\n",
+ what, szB, (void*)err_ga, (Int)xe->XE.Race.thr->errmsg_index );
tl_assert(xe->XE.Race.locksHeldW);
show_LockP_summary_textmode( xe->XE.Race.locksHeldW, "" );
@@ -1271,14 +1271,14 @@
if (xe->XE.Race.hctxt) {
SizeT delta = err_ga - xe->XE.Race.haddr;
if (xml) {
- emit(" <auxwhat>Address %#lx is %ld bytes inside a block "
- "of size %ld alloc'd</auxwhat>\n", err_ga, delta,
+ emit(" <auxwhat>Address %p is %ld bytes inside a block "
+ "of size %ld alloc'd</auxwhat>\n", (void*)err_ga, delta,
xe->XE.Race.hszB);
VG_(pp_ExeContext)( xe->XE.Race.hctxt );
} else {
emit("\n");
- emit("Address %#lx is %ld bytes inside a block "
- "of size %ld alloc'd\n", err_ga, delta,
+ emit("Address %p is %ld bytes inside a block "
+ "of size %ld alloc'd\n", (void*)err_ga, delta,
xe->XE.Race.hszB);
VG_(pp_ExeContext)( xe->XE.Race.hctxt );
}
|
|
From: Julian S. <js...@ac...> - 2011-03-22 16:39:30
|
On 64 bit platforms it's free in both space and time. On 32 bit platforms it's free in time but adds some space overhead (20% ish) to the history mechanism that records older (conflicting) accesses. The amount of space used by the conflicting access info is limited by default to around 100MB by throwing away older info, so it's not a big deal. J On Monday, March 21, 2011, Konstantin Serebryany wrote: > Cool! > Is this for free, or it adds a non-zero overhead? > > --kcc > > On Sun, Mar 20, 2011 at 11:50 PM, <sv...@va...> wrote: > > Author: sewardj > > Date: 2011-03-20 20:50:54 +0000 (Sun, 20 Mar 2011) > > New Revision: 11659 > > > > Log: > > Add the ability to show the set of locks shown by each thread in a > > race, which makes diagnosing races a lot easier. As a side effect, > > change the way errors are printed to more clearly delimit the > > boundaries of errors. |