diff options
author | Marc Laukien <marc@zeroc.com> | 2003-02-06 20:39:02 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2003-02-06 20:39:02 +0000 |
commit | 8c47a19fe0a38c6c9a6e97b7859df7f9b5a8b6fb (patch) | |
tree | 8fd580420dad30c88fc38c5e8940b9e68ffed297 /java/src | |
parent | do not use Ice version in service shared library name (diff) | |
download | ice-8c47a19fe0a38c6c9a6e97b7859df7f9b5a8b6fb.tar.bz2 ice-8c47a19fe0a38c6c9a6e97b7859df7f9b5a8b6fb.tar.xz ice-8c47a19fe0a38c6c9a6e97b7859df7f9b5a8b6fb.zip |
encaps fixes
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/IceInternal/BasicStream.java | 15 | ||||
-rw-r--r-- | java/src/IceInternal/Incoming.java | 8 | ||||
-rw-r--r-- | java/src/IceInternal/IncomingAsync.java | 4 | ||||
-rw-r--r-- | java/src/IceInternal/IncomingBase.java | 11 | ||||
-rw-r--r-- | java/src/IceInternal/OutgoingAsync.java | 3 |
5 files changed, 33 insertions, 8 deletions
diff --git a/java/src/IceInternal/BasicStream.java b/java/src/IceInternal/BasicStream.java index 20a4ea56bbe..50b96d75c22 100644 --- a/java/src/IceInternal/BasicStream.java +++ b/java/src/IceInternal/BasicStream.java @@ -244,6 +244,21 @@ public class BasicStream public void endReadEncaps() { + checkReadEncaps(); + final ReadEncaps curr = _readEncapsStack; + assert(curr != null); + _readEncapsStack = curr.next; + curr.next = _readEncapsCache; + _readEncapsCache = curr; + if(_readEncapsCache.objectsRead != null) + { + _readEncapsCache.objectsRead.clear(); + } + } + + public void + skipReadEncaps() + { final ReadEncaps curr = _readEncapsStack; assert(curr != null); final int start = curr.start; diff --git a/java/src/IceInternal/Incoming.java b/java/src/IceInternal/Incoming.java index cd3f0a2ba0e..c3b618368b1 100644 --- a/java/src/IceInternal/Incoming.java +++ b/java/src/IceInternal/Incoming.java @@ -205,7 +205,7 @@ final public class Incoming extends IncomingBase _os.writeString(ex.operation); } - __finishInvoke(); + __finishInvoke(false); return; } catch(Ice.LocalException ex) @@ -220,7 +220,7 @@ final public class Incoming extends IncomingBase _os.writeString(ex.toString()); } - __finishInvoke(); + __finishInvoke(false); return; } /* Not possible in Java - UserExceptions are checked exceptions @@ -241,7 +241,7 @@ final public class Incoming extends IncomingBase _os.writeString(ex.toString()); } - __finishInvoke(); + __finishInvoke(false); return; } @@ -277,7 +277,7 @@ final public class Incoming extends IncomingBase } } - __finishInvoke(); + __finishInvoke(status == DispatchStatus.DispatchOK || status == DispatchStatus.DispatchUserException); } public BasicStream diff --git a/java/src/IceInternal/IncomingAsync.java b/java/src/IceInternal/IncomingAsync.java index 6fceb838899..7c91d2d3187 100644 --- a/java/src/IceInternal/IncomingAsync.java +++ b/java/src/IceInternal/IncomingAsync.java @@ -58,7 +58,7 @@ public class IncomingAsync extends IncomingBase _os.pos(save); } - __finishInvoke(); + __finishInvoke(true); } final protected void @@ -149,7 +149,7 @@ public class IncomingAsync extends IncomingBase } } - __finishInvoke(); + __finishInvoke(false); } final protected BasicStream diff --git a/java/src/IceInternal/IncomingBase.java b/java/src/IceInternal/IncomingBase.java index d90363c92a9..b5f37ffcbcf 100644 --- a/java/src/IceInternal/IncomingBase.java +++ b/java/src/IceInternal/IncomingBase.java @@ -63,14 +63,21 @@ public class IncomingBase } final protected void - __finishInvoke() + __finishInvoke(boolean success) { if(_locator != null && _servant != null) { _locator.finished(_current, _servant, _cookie.value); } - _is.endReadEncaps(); + if(success) + { + _is.endReadEncaps(); + } + else + { + _is.skipReadEncaps(); + } // // Send a response if necessary. If we don't need to send a diff --git a/java/src/IceInternal/OutgoingAsync.java b/java/src/IceInternal/OutgoingAsync.java index d99e6b80fb1..93a5691a4c8 100644 --- a/java/src/IceInternal/OutgoingAsync.java +++ b/java/src/IceInternal/OutgoingAsync.java @@ -93,7 +93,10 @@ public abstract class OutgoingAsync { try { + _os.endWriteEncaps(); + _connection.sendAsyncRequest(this); + if(_connection.timeout() >= 0) { _absoluteTimeoutMillis = System.currentTimeMillis() + _connection.timeout() * 1000; |