#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. |
1.3.6