std.container.BinaryHeap + refCounted = WTF???
dsimcha
dsimcha at yahoo.com
Tue Nov 16 12:47:07 PST 2010
I'm trying to use BinaryHeap in a multithreaded programming using
std.parallelism/parallelfuture. I kept getting ridiculous segfaults and
stuff, and when I looked into it in a debugger, I realized the crashes had to
do with reference counting, probably caused by this line in BinaryHeap:
private RefCounted!(Tuple!(Store, "_store", size_t, "_length"),
RefCountedAutoInitialize.no) _payload;
Why the heck are the payload and the length being stored in such a weird way?
IMHO BinaryHeap shouldn't use reference counting unless Store does. More
generally, anything that uses reference counting, especially where unexpected,
should come with a very strong warning in its ddoc so that people are aware of
the hidden caveats, like copying it using memcpy() and sharing it across threads.
More information about the Digitalmars-d
mailing list