On Thursday, 8 August 2013 at 21:16:36 UTC, David Nadlinger wrote:
On Thursday, 8 August 2013 at 20:08:11 UTC, JR wrote:
I put together http://dpaste.dzfl.pl/d7322971 earlier to
demonstrate some of these errors, though I didn't mention the
raciness of passing pointers there. To test that race I used
http://dpaste.dzfl.pl/e6fd4569.
That's just a bug in your code; when taking a pointer to stack
data (which is un-@safe), you have to take care not to escape
it from the scope.
Can I manually store it on the heap and let the garbage collector
keep it safe? I know of the opposite -- instantiating a class on
the stack with the scope keyword -- but that doesn't help me here.
I guess I could have the sender wait for an 'okay done' priority
message from the receiving thread before escaping the scope, but
I don't have any guarantees that some other thread doesn't send a
different message in the meantime (such as the server reader
passing on a new raw string) when I'm not ready for such.
Also I could *technically* have a __gshared struct/class act as a
container for an array of these event structs (with synchronized
rotating push and front properties), but my pride would take a
huge blow and I don't have enough ice cream.