On Monday, 20 May 2013 at 01:08:16 UTC, Walter Bright wrote:
On 5/19/2013 5:28 PM, deadalnix wrote:
The error lie in improper
initialization of p in the first place, which should never has
been null. The
example looks dumb as this, you have to imagine the pattern
hidden in thousands
of LOC.
I would find a design that declared a variable in one place,
then initialized it in another, while releasing the lock in
between as a bad design pattern to begin with.
I cannot agree more. This is what made tracking the cause of the
bug super hard.
What other default initialized types could be there? What about
an int default initialized to 0, yet code in another thread
expects it to be some other value? I suspect there'd be a lot
more bugs in it than just null pointer initializations.
It might be time to engineer a new pattern so you don't have to
inspect thousands of LOC to manually verify correctness.
I didn't programed Apache Cayenne, int he first place. But I had
to patch it anyway.