diff options
author | Sumant Tambe <sutambe@users.noreply.github.com> | 2010-08-21 23:23:33 +0000 |
---|---|---|
committer | Sumant Tambe <sutambe@users.noreply.github.com> | 2010-08-21 23:23:33 +0000 |
commit | efda5de16fa6e2e99ce9994994edebbabcb5b229 (patch) | |
tree | 2d8653b0326dd3247e9dec633a169a30b89d9c71 /TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp | |
parent | 5840b75f1b2d701c6d26fef8d31e36db17ecda80 (diff) | |
download | ATCD-efda5de16fa6e2e99ce9994994edebbabcb5b229.tar.gz |
Sat Aug 21 23:18:27 UTC 2010 Sumant Tambe <sutambe@nospam>FTCIAO
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp b/TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp new file mode 100644 index 00000000000..dccdc21fb90 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/LWFT/SSA_AMI_Handler.cpp @@ -0,0 +1,156 @@ +#include "SSA_AMI_Handler.h" +#include <ace/Guard_T.h> + + +SSA_AMI_Handler::SSA_AMI_Handler() + : accumulated_results_(0), + success_(true) + //phase_end_condition_(phase_wait_mutex_) +{} + +bool SSA_AMI_Handler::wait_for_results(size_t expected_results, ACE_Time_Value abstime) +{ + if(expected_results == 0) + return true; + + ACE_Time_Value tv(0, 100), total(0,0); + while(true) + { + ami_result_lock_.acquire(); + if((accumulated_results_ >= expected_results) || (total > abstime)) + { + ami_result_lock_.release(); + break; + } + else + { + ami_result_lock_.release(); + ACE_OS::sleep(tv); + total += tv; + } + } + if(total > abstime) + return false; + else + return success_; +} + +void SSA_AMI_Handler::precommit_state(CORBA::Boolean b) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= (b ? 1 : 0); + ++accumulated_results_; +} + +void SSA_AMI_Handler::precommit_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + ++accumulated_results_; +} + +void SSA_AMI_Handler::commit_state() +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= true; + ++accumulated_results_; +} + +void SSA_AMI_Handler::commit_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + ++accumulated_results_; +} + +void SSA_AMI_Handler::transfer_state() +{ + ACE_ERROR ((LM_EMERGENCY, + "(%P|%t) SSA_AMI_Handler::transfer_state () " + "for the application %s\n")); + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= true; + ++accumulated_results_; +} + +void SSA_AMI_Handler::transfer_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + ++accumulated_results_; +} + + +/* +SSA_AMI_Handler::SSA_AMI_Handler() + : ssa_invoked_(0), + success_(true), + phase_end_condition_(phase_wait_mutex_) +{} + +bool SSA_AMI_Handler::wait_for_results(const ACE_Time_Value *abstime) +{ + if(!ssa_invoked_) + return false; + else if(phase_end_condition_.wait(phase_wait_mutex_, abstime) == -1) + return false; + else + return success_; +} + +void SSA_AMI_Handler::ssa_invoked() +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + ++ssa_invoked_; +} + +void SSA_AMI_Handler::release() +{ + --ssa_invoked_; + + if((ssa_invoked_ == 0) || !success_) + phase_end_condition_.broadcast(); +} + +void SSA_AMI_Handler::precommit_state(CORBA::Boolean b) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= (b ? 1 : 0); + release(); +} + +void SSA_AMI_Handler::precommit_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + release(); +} + +void SSA_AMI_Handler::commit_state() +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= true; + release(); +} + +void SSA_AMI_Handler::commit_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + release(); +} + +void SSA_AMI_Handler::transfer_state() +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ &= true; + release(); +} + +void SSA_AMI_Handler::transfer_state_excep(Messaging::ExceptionHolder*) +{ + ACE_Guard<ACE_Thread_Mutex> guard(ami_result_lock_); + success_ = false; + release(); +} + */ |