Struct with default ctor (Was: [dmd-beta] dmd 2.064 beta take 2)

deadalnix deadalnix at gmail.com
Sun May 19 16:06:59 PDT 2013


On Sunday, 19 May 2013 at 22:32:58 UTC, Andrei Alexandrescu wrote:
> How was there a bug if everything was properly synchronized? 
> You either describe the matter with sufficient detail, or 
> acknowledge the destruction of your anecdote. This is going 
> nowhere.
>

I explained over and over. A field is initialized to null, while 
the object lock is owned, and later to its value, while it is 
locked. In the meantime, another thread access the object, owning 
the lock, assuming the field is always initialized.

The exact same problem arise quite often in the single threaded 
world : a reference is set to null, the dev try to be clever when 
initializing it, in a rare case it isn't, and everything blows up 
when it occurs.

It is simply easier to reproduce when things are single threaded, 
and are often quickly debugged in that case.

As explained, the multithreaded environment makes it super hard 
to debug, not the primary cause of the issue. The simply 
consistent in moving the initialization where it was set to null 
in the first place.

It is an instance of the very classic something may be null and 
code use it assuming it is never null.


More information about the Digitalmars-d mailing list