summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/CORBA/Poa
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-09 19:58:05 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-09 19:58:05 +0000
commit65bf3316cf384588453604be6b4f0ed3751a8b0f (patch)
tree996a5f57d4a68c53473382e45cb22f574cb3e4db /libjava/classpath/gnu/CORBA/Poa
parent8fc56618a84446beccd45b80381cdfe0e94050df (diff)
downloadppe42-gcc-65bf3316cf384588453604be6b4f0ed3751a8b0f.tar.gz
ppe42-gcc-65bf3316cf384588453604be6b4f0ed3751a8b0f.zip
Merged gcj-eclipse branch to trunk.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120621 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/classpath/gnu/CORBA/Poa')
-rw-r--r--libjava/classpath/gnu/CORBA/Poa/LocalRequest.java7
-rw-r--r--libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java2
-rw-r--r--libjava/classpath/gnu/CORBA/Poa/gnuPOA.java4
-rw-r--r--libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java15
4 files changed, 21 insertions, 7 deletions
diff --git a/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java b/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java
index a2c0bb106c3..4a9ef8d9044 100644
--- a/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java
+++ b/libjava/classpath/gnu/CORBA/Poa/LocalRequest.java
@@ -193,11 +193,14 @@ public class LocalRequest extends gnuRequest implements ResponseHandler,
/**
* Make an invocation and return a stream from where the results can be read.
*
- * @param the invoke handler (can be null, then it is obtained self
+ * @param handler the invoke handler (can be null, then it is obtained self
* dependently).
*/
public org.omg.CORBA.portable.InputStream v_invoke(InvokeHandler handler)
{
+ // Check maybe POA is in the discarding mode (will throw TRANSIENT if it is).
+ poa.checkDiscarding();
+
// Local request must be intercepted both by server and request
// interceptors.
boolean s_intercept = false;
@@ -246,7 +249,7 @@ public class LocalRequest extends gnuRequest implements ResponseHandler,
s_interceptor.receive_request_service_contexts(s_info);
}
-
+
if (handler == null)
{
handler = object.getHandler(operation(), cookie, false);
diff --git a/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java b/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java
index bb00aab70eb..4fc51ff154b 100644
--- a/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java
+++ b/libjava/classpath/gnu/CORBA/Poa/ORB_1_4.java
@@ -290,4 +290,4 @@ public class ORB_1_4
}
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java b/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java
index 460a0a6029a..8ceec23d781 100644
--- a/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java
+++ b/libjava/classpath/gnu/CORBA/Poa/gnuPOA.java
@@ -1582,7 +1582,7 @@ public class gnuPOA
*
* @throws TRANSIENT if the POA is in discarding mode.
*/
- private void checkDiscarding()
+ void checkDiscarding()
throws TRANSIENT
{
if (m_manager.get_state() == State.DISCARDING)
@@ -1813,4 +1813,4 @@ public class gnuPOA
{
return ref_template_ids;
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java b/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java
index 020897a45b4..77b0ff46792 100644
--- a/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java
+++ b/libjava/classpath/gnu/CORBA/Poa/gnuServantObject.java
@@ -129,6 +129,12 @@ public class gnuServantObject extends ObjectImpl
* ids are requested from the servant.
*/
public final String[] repository_ids;
+
+ /**
+ * True indicates that the NO_RETAIN policy applies for the servant.
+ * The servant must be discarded after the each call.
+ */
+ boolean noRetain;
/**
* Create an object with no connected servant. The servant must be set later.
@@ -147,6 +153,8 @@ public class gnuServantObject extends ObjectImpl
manager = a_poa.the_POAManager();
poa = a_poa;
orb = an_orb;
+
+ noRetain = poa.applies(ServantRetentionPolicyValue.NON_RETAIN);
}
/**
@@ -182,6 +190,8 @@ public class gnuServantObject extends ObjectImpl
}
repository_ids = null;
orb = an_orb;
+
+ noRetain = poa != null && poa.applies(ServantRetentionPolicyValue.NON_RETAIN);
}
/**
@@ -222,7 +232,7 @@ public class gnuServantObject extends ObjectImpl
boolean forwarding_allowed
) throws gnuForwardRequest
{
- if (servant != null)
+ if (servant != null && !noRetain)
{
return servantToHandler(servant);
}
@@ -641,13 +651,14 @@ public class gnuServantObject extends ObjectImpl
poa.servant_locator.postinvoke(Id, poa, method,
cookie.value, servant
);
- servant = null;
}
}
}
finally
{
orb.currents.remove(Thread.currentThread());
+ if (noRetain)
+ servant = null;
}
}
catch (ForwardRequest fex)
OpenPOWER on IntegriCloud