8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method

Reviewed-by: chegar, alanb
This commit is contained in:
Mark Sheppard 2015-04-13 14:50:27 +01:00
parent ec05163d91
commit 5d1e4e2ba1
2 changed files with 43 additions and 24 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2015, 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
@ -1768,43 +1768,59 @@ public class IIOPInputStream
switch (field.getTypeCode()) {
case 'B':
byte byteValue = orbStream.read_octet();
bridge.putByte( o, field.getFieldID(), byteValue ) ;
//reflective code: field.getField().setByte( o, byteValue ) ;
if (field.getField() != null) {
bridge.putByte( o, field.getFieldID(), byteValue ) ;
//reflective code: field.getField().setByte( o, byteValue ) ;
}
break;
case 'Z':
boolean booleanValue = orbStream.read_boolean();
bridge.putBoolean( o, field.getFieldID(), booleanValue ) ;
//reflective code: field.getField().setBoolean( o, booleanValue ) ;
if (field.getField() != null) {
bridge.putBoolean( o, field.getFieldID(), booleanValue ) ;
//reflective code: field.getField().setBoolean( o, booleanValue ) ;
}
break;
case 'C':
char charValue = orbStream.read_wchar();
bridge.putChar( o, field.getFieldID(), charValue ) ;
//reflective code: field.getField().setChar( o, charValue ) ;
if (field.getField() != null) {
bridge.putChar( o, field.getFieldID(), charValue ) ;
//reflective code: field.getField().setChar( o, charValue ) ;
}
break;
case 'S':
short shortValue = orbStream.read_short();
bridge.putShort( o, field.getFieldID(), shortValue ) ;
//reflective code: field.getField().setShort( o, shortValue ) ;
if (field.getField() != null) {
bridge.putShort( o, field.getFieldID(), shortValue ) ;
//reflective code: field.getField().setShort( o, shortValue ) ;
}
break;
case 'I':
int intValue = orbStream.read_long();
bridge.putInt( o, field.getFieldID(), intValue ) ;
//reflective code: field.getField().setInt( o, intValue ) ;
if (field.getField() != null) {
bridge.putInt( o, field.getFieldID(), intValue ) ;
//reflective code: field.getField().setInt( o, intValue ) ;
}
break;
case 'J':
long longValue = orbStream.read_longlong();
bridge.putLong( o, field.getFieldID(), longValue ) ;
//reflective code: field.getField().setLong( o, longValue ) ;
if (field.getField() != null) {
bridge.putLong( o, field.getFieldID(), longValue ) ;
//reflective code: field.getField().setLong( o, longValue ) ;
}
break;
case 'F' :
float floatValue = orbStream.read_float();
bridge.putFloat( o, field.getFieldID(), floatValue ) ;
//reflective code: field.getField().setFloat( o, floatValue ) ;
if (field.getField() != null) {
bridge.putFloat( o, field.getFieldID(), floatValue ) ;
//reflective code: field.getField().setFloat( o, floatValue ) ;
}
break;
case 'D' :
double doubleValue = orbStream.read_double();
bridge.putDouble( o, field.getFieldID(), doubleValue ) ;
//reflective code: field.getField().setDouble( o, doubleValue ) ;
if (field.getField() != null) {
bridge.putDouble( o, field.getFieldID(), doubleValue ) ;
//reflective code: field.getField().setDouble( o, doubleValue ) ;
}
break;
default:
// XXX I18N, logging needed.
@ -2217,9 +2233,6 @@ public class IIOPInputStream
if (o != null) {
for (int i = 0; i < primFields; ++i) {
if (fields[i].getField() == null)
continue;
inputPrimitiveField(o, cl, fields[i]);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2015, 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
@ -32,6 +32,7 @@
package com.sun.corba.se.impl.io;
import java.io.IOException;
import java.io.NotActiveException;
import java.io.OutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectOutput;
@ -154,7 +155,9 @@ public abstract class OutputStreamHook extends ObjectOutputStream
public ObjectOutputStream.PutField putFields()
throws IOException {
putFields = new HookPutFields();
if (putFields == null) {
putFields = new HookPutFields();
}
return putFields;
}
@ -175,8 +178,11 @@ public abstract class OutputStreamHook extends ObjectOutputStream
throws IOException {
writeObjectState.defaultWriteObject(this);
putFields.write(this);
if (putFields != null) {
putFields.write(this);
} else {
throw new NotActiveException("no current PutField object");
}
}
abstract org.omg.CORBA_2_3.portable.OutputStream getOrbStream();