RFR(s): 8023541 Race condition in rmid initialization
stuart.marks at oracle.com
Thu Jan 30 19:00:17 UTC 2014
On 1/30/14 1:09 AM, Daniel Fuchs wrote:
> I wonder whether you should replace the assert in the
> constructor by an explicit null check:
> - assert systemStub != null
> + if (systemStub == null) throw new NullPointerException();
> The reason I see is that before your change, an object constructed
> with a null systemStub would have sooner or later failed in NPE.
> Now with your change, an object constructed with a null system
> stub will block - waiting forever for system stub to become not
> The question of course is whether throwing NPE in the constructor
> would cause any compatibility issues. Passing the JCK might help
> to figure it out.
I considered an explicit null test, or something like Objects.requireNonNull,
but decided against them. The reason is that this is a private nested class, and
there is only one caller elsewhere in the containing class. We just need to make
sure this is right, and there's no use checking at runtime.
I was going to add a comment saying "systemStub must be non-null" but then I
realized Hey! That's what assert statements are for.
Rmid creation always goes through this path, and this is done repeatedly by the
tests. Tests are run with assertions enabled so I think we're well covered here.
More information about the core-libs-dev