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; } }