src/share/classes/java/lang/ref/Reference.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 136,147 ****
--- 136,156 ----
if (pending != null) {
r = pending;
pending = r.discovered;
r.discovered = null;
} else {
+ // we explicitly cascade the two exceptions here to avoid
+ // double throw of OOME in case InterruptedException needs
+ // to be loaded during OOME caused by waiting for the
+ // lock to be signaled.
+ // The class loading may further trigger other secondary
+ // exceptions due to low memory that may cause the thread
+ // to terminate too.
+ try {
try {
lock.wait();
+ } catch (OutOfMemoryError x) { }
} catch (InterruptedException x) { }
continue;
}
}