[Issue 8774] 2.059 worked 2.060 does not: nested delegate memory corruption
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Dec 26 03:57:14 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8774
Dmitry Olshansky <dmitry.olsh at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|2.059 worked 2.060 does |2.059 worked 2.060 does
|not: Unable to join thread |not: nested delegate memory
| |corruption
--- Comment #16 from Dmitry Olshansky <dmitry.olsh at gmail.com> 2012-12-26 03:57:08 PST ---
Okay I drilled this down and the bug is not related to threading.
Short-list for Russel:
- the bug in the original code is fixed by .array on result of map
- to workaround a strange stackframe corruption bug pass 'i' instead of 'ii' in
partialSum and it works.
Now on to the real problem discovered, I guess Walter has some work to do
though as it doesn't look related to threading and run-time at all.
The minimized test case with threading removed,
shows that variable sliceSize gets corrupted:
import std.stdio;
import std.algorithm;
import std.range;
int sliceBefore;
void partialSum ( immutable int id , immutable int sliceSize , immutable double
delta ) {
writeln("PSUM: ", id, " SLICE: ", sliceSize, " DELTA:", delta);
assert(sliceSize == sliceBefore);
}
void corrupt( immutable int numberOfThreads ) {
immutable n = 1000000000 ;
immutable delta = 1.0 / n ;
immutable sliceSize = n / numberOfThreads ;
sliceBefore = sliceSize;
writeln("REAL SLICE SIZE: ", sliceSize);
auto threads = map ! ( ( int i ) {
auto closedPartialSum ( ) {
immutable ii = i ;
return delegate ( ) {
//change ii to i and it works
partialSum (ii , sliceSize , delta ) ;
};
}
return closedPartialSum;
}) ( iota ( numberOfThreads ) ).array;
foreach(dg; threads)
dg();
}
void main(){
corrupt(1);
}
Yields the following (exact corrupted number in SLICE varies):
REAL SLICE SIZE: 1000000000
PSUM: 0 SLICE: 1588842464 DELTA:1e-09
core.exception.AssertError at quadrature(15): Assertion failure
....
Can somebody having 2.059 check if this simplified test case passes there.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list