Hi Stuart,
My eye was caught by the following new method:
328 private synchronized void awaitInitialized() {
329 try {
330 while (!initialized) {
331 wait();
332 }
333 } catch (InterruptedException ie) {
334 Thread.currentThread().interrupt();
335 }
336 }
...if the thread calling this method is interrupted while waiting, it
will set the interrupted status of the thread back, but will terminate
the waiting loop. So the initialization race is still possible. Why not
wait until initialized like:
boolean interrupted = false;
while (!initialized) {
try {
wait();
} catch (InterruptedException ie) {
interrupted = true;
}
}
if (interrupted) {
Thread.currentThread().interrupt();
}
Regards, Peter
boolean interrupted = false;
On 01/29/2014 07:51 AM, Stuart Marks wrote:
Hi all,
Please review this fix to a race condition in rmid initialization.
Briefly, rmid subclasses the RMI registry implementation and provides
special handling for its own stub. Unfortunately the registry is
exported in the super() call, making remote calls possible before
rmid's stub initialization is complete. The fix is to ensure that all
remote calls wait for initialization before proceeding.
Bug:
https://bugs.openjdk.java.net/browse/JDK-8023541
Webrev:
http://cr.openjdk.java.net/~smarks/reviews/8023541/webrev.0/
Thanks,
s'marks