diff options
Diffstat (limited to 'TAO/tao/PortableInterceptor.i')
-rw-r--r-- | TAO/tao/PortableInterceptor.i | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/TAO/tao/PortableInterceptor.i b/TAO/tao/PortableInterceptor.i index 141f9ddc48d..f97ad7b8175 100644 --- a/TAO/tao/PortableInterceptor.i +++ b/TAO/tao/PortableInterceptor.i @@ -91,7 +91,7 @@ receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri, // invoked. This is necessary to prevent an interceptor already // invoked in this "ending" interception point from being // invoked in another "ending" interception point. - --this->stack_size_; + --this->stack_size_; this->interceptors_[this->stack_size_]->receive_exception ( ri @@ -102,6 +102,38 @@ receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri, ACE_UNUSED_ARG (ACE_TRY_ENV); } +ACE_INLINE void +TAO_ClientRequestInterceptor_Adapter:: +receive_other (PortableInterceptor::ClientRequestInfo_ptr ri, + CORBA::Environment &ACE_TRY_ENV) +{ + // This is an "ending" interception point so we only process the + // interceptors pushed on to the flow stack. + + // Notice that the interceptors are processed in the opposite order + // they were pushed onto the stack since this is an "ending" + // interception point. + + // Unwind the stack. + size_t len = this->stack_size_; + for (size_t i = 0; i < len; ++i) + { + // Pop the interceptor off of the flow stack before it is + // invoked. This is necessary to prevent an interceptor already + // invoked in this "ending" interception point from being + // invoked in another "ending" interception point. + --this->stack_size_; + + this->interceptors_[this->stack_size_]->receive_other ( + ri + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + } + + ACE_UNUSED_ARG (ACE_TRY_ENV); + +} + // ------------------------------------------------------------------- ACE_INLINE @@ -170,7 +202,7 @@ send_reply (PortableInterceptor::ServerRequestInfo_ptr ri, // invoked. This is necessary to prevent an interceptor already // invoked in this "ending" interception point from being // invoked in another "ending" interception point. - --this->stack_size_; + --this->stack_size_; this->interceptors_[this->stack_size_]->send_reply ( ri @@ -201,7 +233,7 @@ send_exception (PortableInterceptor::ServerRequestInfo_ptr ri, // invoked. This is necessary to prevent an interceptor already // invoked in this "ending" interception point from being // invoked in another "ending" interception point. - --this->stack_size_; + --this->stack_size_; this->interceptors_[this->stack_size_]->send_exception ( ri |