summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2019-06-28 09:20:21 +0200
committerGitHub <noreply@github.com>2019-06-28 09:20:21 +0200
commitf2f1869fbfe408eadd99c3b6692302d56c06fa86 (patch)
treebfd9620a86d4c0531eee0841062e2a9227160685 /java
parentRemove extra empty line (diff)
downloadice-f2f1869fbfe408eadd99c3b6692302d56c06fa86.tar.bz2
ice-f2f1869fbfe408eadd99c3b6692302d56c06fa86.tar.xz
ice-f2f1869fbfe408eadd99c3b6692302d56c06fa86.zip
Added back caching of output stream, fixes #414 (#415)
Added back caching of output stream for sync dispatch responses, fixes #414
Diffstat (limited to 'java')
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/Incoming.java46
1 files changed, 33 insertions, 13 deletions
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Incoming.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Incoming.java
index 654a09baa50..dc5a60d390a 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Incoming.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Incoming.java
@@ -81,7 +81,7 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_os != null)
{
- _os.reset();
+ _os.reset(); // Reset the output stream to prepare it for re-use.
}
_is = null;
@@ -397,7 +397,10 @@ final public class Incoming implements com.zeroc.Ice.Request
// Let's rewind _is and reset _os
//
_is.pos(_inParamPos);
- _os = null;
+ if(_response && _os != null)
+ {
+ _os.reset();
+ }
}
}
@@ -454,14 +457,17 @@ final public class Incoming implements com.zeroc.Ice.Request
return os;
}
- public com.zeroc.Ice.OutputStream startWriteParams()
+ public OutputStream startWriteParams()
{
if(!_response)
{
throw new com.zeroc.Ice.MarshalException("can't marshal out parameters for oneway dispatch");
}
- OutputStream os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
+ // If there's an output stream set, re-use it for the response
+ OutputStream os = _os == null ? new OutputStream(_instance, Protocol.currentProtocolEncoding) : _os;
+ assert(os.pos() == 0);
+ _os = null;
os.writeBlob(Protocol.replyHdr);
os.writeInt(_current.requestId);
os.writeByte(ReplyStatus.replyOK);
@@ -481,7 +487,10 @@ final public class Incoming implements com.zeroc.Ice.Request
{
if(_response)
{
- OutputStream os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
+ // If there's an output stream set, re-use it for the response
+ OutputStream os = _os == null ? new OutputStream(_instance, Protocol.currentProtocolEncoding) : _os;
+ assert(os.pos() == 0);
+ _os = null;
os.writeBlob(Protocol.replyHdr);
os.writeInt(_current.requestId);
os.writeByte(ReplyStatus.replyOK);
@@ -503,7 +512,10 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
- OutputStream os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
+ // If there's an output stream set, re-use it for the response
+ OutputStream os = _os == null ? new OutputStream(_instance, Protocol.currentProtocolEncoding) : _os;
+ assert(os.pos() == 0);
+ _os = null;
os.writeBlob(Protocol.replyHdr);
os.writeInt(_current.requestId);
os.writeByte(ok ? ReplyStatus.replyOK : ReplyStatus.replyUserException);
@@ -563,6 +575,21 @@ final public class Incoming implements com.zeroc.Ice.Request
{
assert(_responseHandler != null);
+ if(_response)
+ {
+ //
+ // If there's already a response output stream, reset it to re-use it
+ //
+ if(_os != null)
+ {
+ _os.reset();
+ }
+ else
+ {
+ _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
+ }
+ }
+
try
{
throw exc;
@@ -597,7 +624,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
if(ex instanceof com.zeroc.Ice.ObjectNotExistException)
@@ -659,7 +685,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUnknownLocalException);
@@ -690,7 +715,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUnknownUserException);
@@ -721,7 +745,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUnknownException);
@@ -747,7 +770,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUserException);
@@ -788,7 +810,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUnknownLocalException);
@@ -834,7 +855,6 @@ final public class Incoming implements com.zeroc.Ice.Request
if(_response)
{
assert(_responseHandler != null && _current != null);
- _os = new OutputStream(_instance, Protocol.currentProtocolEncoding);
_os.writeBlob(Protocol.replyHdr);
_os.writeInt(_current.requestId);
_os.writeByte(ReplyStatus.replyUnknownException);