7091388: Regular unexplained npe's from corba libs after system has been running for days
Reviewed-by: alanb
--- a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream.java Wed Jul 05 17:54:55 2017 +0200
+++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream.java Fri Nov 11 10:16:17 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/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java Wed Jul 05 17:54:55 2017 +0200
+++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java Fri Nov 11 10:16:17 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/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream.java Wed Jul 05 17:54:55 2017 +0200
+++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream.java Fri Nov 11 10:16:17 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/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java Wed Jul 05 17:54:55 2017 +0200
+++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java Fri Nov 11 10:16:17 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);
}
}
}