#include <CEC_Dispatching_Task.h>
Inheritance diagram for TAO_CEC_Dispatching_Task:
Public Member Functions | |
TAO_CEC_Dispatching_Task (ACE_Thread_Manager *thr_manager=0) | |
Constructor. | |
virtual int | svc (void) |
Process the events in the queue. | |
virtual void | push (TAO_CEC_ProxyPushSupplier *proxy, CORBA::Any &event ACE_ENV_ARG_DECL) |
Private Attributes | |
ACE_Allocator * | allocator_ |
An per-task allocator. | |
ACE_Locked_Data_Block< ACE_Lock_Adapter< TAO_SYNCH_MUTEX > > | data_block_ |
Helper data structure to minimize memory allocations... |
Definition at line 47 of file CEC_Dispatching_Task.h.
|
Constructor.
Definition at line 9 of file CEC_Dispatching_Task.i. References ACE_SYNCH.
00010 : ACE_Task<ACE_SYNCH> (thr_manager), 00011 allocator_ (0) 00012 { 00013 } |
|
Definition at line 65 of file CEC_Dispatching_Task.cpp. References ACE_THROW, ACE_Allocator::instance(), ACE_Allocator::malloc(), and ACE_Task< ACE_SYNCH >::putq(). Referenced by TAO_CEC_MT_Dispatching::push_nocopy().
00068 { 00069 if (this->allocator_ == 0) 00070 this->allocator_ = ACE_Allocator::instance (); 00071 00072 void* buf = this->allocator_->malloc (sizeof (TAO_CEC_Push_Command)); 00073 00074 if (buf == 0) 00075 ACE_THROW (CORBA::NO_MEMORY (TAO::VMCID, 00076 CORBA::COMPLETED_NO)); 00077 00078 ACE_Message_Block *mb = 00079 new (buf) TAO_CEC_Push_Command (proxy, 00080 event, 00081 this->data_block_.duplicate (), 00082 this->allocator_); 00083 this->putq (mb); 00084 } |
|
Process the events in the queue.
Reimplemented from ACE_Task_Base. Definition at line 22 of file CEC_Dispatching_Task.cpp. References ACE_ANY_EXCEPTION, ACE_CATCHANY, ACE_ENDTRY, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_ERROR, ACE_PRINT_EXCEPTION, ACE_TRY_CHECK, ACE_TRY_NEW_ENV, ESHUTDOWN, TAO_CEC_Dispatch_Command::execute(), ACE_Task< ACE_SYNCH >::getq(), ACE_OS::last_error(), LM_ERROR, and ACE_Message_Block::release().
00023 { 00024 int done = 0; 00025 while (!done) 00026 { 00027 ACE_TRY_NEW_ENV 00028 { 00029 ACE_Message_Block *mb; 00030 if (this->getq (mb) == -1) 00031 if (ACE_OS::last_error () == ESHUTDOWN) 00032 return 0; 00033 else 00034 ACE_ERROR ((LM_ERROR, 00035 "EC (%P|%t) getq error in Dispatching Queue\n")); 00036 00037 TAO_CEC_Dispatch_Command *command = 00038 dynamic_cast<TAO_CEC_Dispatch_Command*> (mb); 00039 00040 if (command == 0) 00041 { 00042 ACE_Message_Block::release (mb); 00043 continue; 00044 } 00045 00046 int result = command->execute (ACE_ENV_SINGLE_ARG_PARAMETER); 00047 ACE_TRY_CHECK; 00048 00049 ACE_Message_Block::release (mb); 00050 00051 if (result == -1) 00052 done = 1; 00053 } 00054 ACE_CATCHANY 00055 { 00056 ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, 00057 "EC (%P|%t) exception in dispatching queue"); 00058 } 00059 ACE_ENDTRY; 00060 } 00061 return 0; 00062 } |
|
An per-task allocator.
Definition at line 68 of file CEC_Dispatching_Task.h. |
|
Helper data structure to minimize memory allocations...
Definition at line 71 of file CEC_Dispatching_Task.h. |