Mercurial > hg > openjdk > icedtea > jdk7 > corba
changeset 370:665237a860dd
7091388: Regular unexplained npe's from corba libs after few days
Reviewed-by: alanb
author | coffeys |
---|---|
date | Tue, 15 Nov 2011 18:10:58 +0000 |
parents | c35fe7738002 |
children | 6dd348fb7091 |
files | src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream.java src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream.java src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java |
diffstat | 4 files changed, 28 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream.java Fri Nov 04 11:44:48 2011 -0700 +++ b/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream.java Tue Nov 15 18:10:58 2011 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -423,6 +423,13 @@ impl.setByteBufferWithInfo(bbwi); } + /** + * return true if our ByteBuffer is sharing/equal to bb + */ + protected final boolean isSharing(ByteBuffer bb) { + return (getByteBuffer() == bb); + } + public final int getBufferLength() { return impl.getBufferLength(); }
--- a/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java Fri Nov 04 11:44:48 2011 -0700 +++ b/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java Tue Nov 15 18:10:58 2011 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -2412,7 +2412,6 @@ if (bbwi != null && getByteBuffer() != null) { - int bbHash = System.identityHashCode(bbwi.byteBuffer); MessageMediator messageMediator = parent.getMessageMediator(); if (messageMediator != null) { @@ -2420,19 +2419,12 @@ (CDROutputObject)messageMediator.getOutputObject(); if (outputObj != null) { - ByteBuffer outputBb = outputObj.getByteBuffer(); - - int oBbHash = 0; - if (outputBb != null) + if (outputObj.isSharing(getByteBuffer())) { - oBbHash = System.identityHashCode(outputBb); - if (bbHash == oBbHash) // shared? - { - // Set OutputStream's ByteBuffer and bbwi to null - // so its ByteBuffer cannot be released to the pool - outputObj.setByteBuffer(null); - outputObj.setByteBufferWithInfo(null); - } + // Set OutputStream's ByteBuffer and bbwi to null + // so its ByteBuffer cannot be released to the pool + outputObj.setByteBuffer(null); + outputObj.setByteBufferWithInfo(null); } } }
--- a/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream.java Fri Nov 04 11:44:48 2011 -0700 +++ b/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream.java Tue Nov 15 18:10:58 2011 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -357,6 +357,13 @@ impl.setByteBuffer(byteBuffer); } + /** + * return true if our ByteBuffer is sharing/equal to bb + */ + protected final boolean isSharing(ByteBuffer bb) { + return (getByteBuffer() == bb); + } + public final boolean isLittleEndian() { return impl.isLittleEndian(); }
--- a/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java Fri Nov 04 11:44:48 2011 -0700 +++ b/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java Tue Nov 15 18:10:58 2011 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -1902,7 +1902,6 @@ if (getByteBufferWithInfo() != null && getByteBuffer() != null) { - int bbHash = System.identityHashCode(bbwi.byteBuffer); MessageMediator messageMediator = parent.getMessageMediator(); if (messageMediator != null) { @@ -1910,19 +1909,12 @@ (CDRInputObject)messageMediator.getInputObject(); if (inputObj != null) { - ByteBuffer inputBb = inputObj.getByteBuffer(); - - int iBbHash = 0; - if (inputBb != null) + if (inputObj.isSharing(getByteBuffer())) { - iBbHash = System.identityHashCode(inputBb); - if (bbHash == iBbHash) // shared? - { - // Set InputStream's ByteBuffer and bbwi to null - // so its ByteBuffer cannot be released to the pool - inputObj.setByteBuffer(null); - inputObj.setByteBufferWithInfo(null); - } + // Set InputStream's ByteBuffer and bbwi to null + // so its ByteBuffer cannot be released to the pool + inputObj.setByteBuffer(null); + inputObj.setByteBufferWithInfo(null); } } }