summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/IceInternal/BasicStream.java7
-rw-r--r--java/src/IceInternal/Incoming.java16
-rw-r--r--java/src/IceInternal/ThreadPool.java1
3 files changed, 17 insertions, 7 deletions
diff --git a/java/src/IceInternal/BasicStream.java b/java/src/IceInternal/BasicStream.java
index c880b3d7bc1..ad568e3f347 100644
--- a/java/src/IceInternal/BasicStream.java
+++ b/java/src/IceInternal/BasicStream.java
@@ -28,6 +28,10 @@ public class BasicStream
_writeEncapsCache = null;
}
+ /*
+ * Do NOT use a finalizer for BasicStream - this causes a
+ * severe performance penalty!
+ *
protected void
finalize()
throws Throwable
@@ -39,9 +43,10 @@ public class BasicStream
super.finalize();
}
+ */
//
- // Optional - deterministic destruction
+ // Must be called in order to reclaim the buffer
//
public void
destroy()
diff --git a/java/src/IceInternal/Incoming.java b/java/src/IceInternal/Incoming.java
index ace56c2e838..3d64cccb856 100644
--- a/java/src/IceInternal/Incoming.java
+++ b/java/src/IceInternal/Incoming.java
@@ -71,8 +71,7 @@ public class Incoming
if (servant == null && current.identity.category.length() > 0)
{
- locator = _adapter.findServantLocator(
- current.identity.category);
+ locator = _adapter.findServantLocator(current.identity.category);
if (locator != null)
{
servant = locator.locate(_adapter, current, cookie);
@@ -99,8 +98,7 @@ public class Incoming
{
if (current.facet.length() > 0)
{
- Ice.Object facetServant =
- servant.ice_findFacet(current.facet);
+ Ice.Object facetServant = servant.ice_findFacet(current.facet);
if (facetServant == null)
{
status = DispatchStatus.DispatchFacetNotExist;
@@ -127,8 +125,7 @@ public class Incoming
{
_os.endWriteEncaps();
- if (status != DispatchStatus.DispatchOK &&
- status != DispatchStatus.DispatchUserException)
+ if (status != DispatchStatus.DispatchOK && status != DispatchStatus.DispatchUserException)
{
_os.resize(statusPos, false);
_os.writeByte((byte)status.value());
@@ -279,6 +276,13 @@ public class Incoming
return _os;
}
+ public void
+ destroy()
+ {
+ _is.destroy();
+ _os.destroy();
+ }
+
private Ice.ObjectAdapter _adapter;
private BasicStream _is;
private BasicStream _os;
diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java
index c6b5c494ba4..2e1c076b6a2 100644
--- a/java/src/IceInternal/ThreadPool.java
+++ b/java/src/IceInternal/ThreadPool.java
@@ -518,6 +518,7 @@ catch (RuntimeException ex)
if (info.callFinished) // Call finished() on the handler?
{
hinfo.handler.finished();
+ hinfo.handler._stream.destroy();
}
if (hinfo.handler.server())
{