00001 #include "ace_pch.h"
00002 #include "ace/Activation_Queue.h"
00003
00004 #if !defined (__ACE_INLINE__)
00005 #include "ace/Activation_Queue.i"
00006 #endif
00007
00008 #include "ace/Log_Msg.h"
00009 #include "ace/Malloc_Base.h"
00010
00011 ACE_RCSID (ace,
00012 Activation_Queue,
00013 "$Id: Activation_Queue.cpp,v 1.1.1.4.2.1 2003/03/13 19:44:20 chad Exp $")
00014
00015
00016 void
00017 ACE_Activation_Queue::dump (void) const
00018 {
00019 ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00020 ACE_DEBUG ((LM_DEBUG,
00021 ACE_LIB_TEXT ("delete_queue_ = %d\n"),
00022 this->delete_queue_));
00023 ACE_DEBUG ((LM_INFO, ACE_LIB_TEXT ("queue_: \n")));
00024 if (this->queue_)
00025 this->queue_->dump();
00026 else
00027 ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("(NULL)\n")));
00028 ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00029 }
00030
00031 ACE_Activation_Queue::ACE_Activation_Queue (ACE_Message_Queue<ACE_SYNCH> *new_queue,
00032 ACE_Allocator *alloc,
00033 ACE_Allocator *db_alloc)
00034 : delete_queue_ (0)
00035 , allocator_(alloc)
00036 , data_block_allocator_(db_alloc)
00037 {
00038 if (this->allocator_ == 0)
00039 this->allocator_ = ACE_Allocator::instance ();
00040
00041 if (new_queue)
00042 this->queue_ = new_queue;
00043 else
00044 {
00045 ACE_NEW (this->queue_,
00046 ACE_Message_Queue<ACE_SYNCH>);
00047 this->delete_queue_ = 1;
00048 }
00049 }
00050
00051 ACE_Activation_Queue::~ACE_Activation_Queue (void)
00052 {
00053 if (this->delete_queue_ != 0)
00054 delete this->queue_;
00055 }
00056
00057 ACE_Method_Request *
00058 ACE_Activation_Queue::dequeue (ACE_Time_Value *tv)
00059 {
00060 ACE_Message_Block *mb;
00061
00062
00063 if (this->queue_->dequeue_head (mb, tv) != -1)
00064 {
00065
00066 ACE_Method_Request *mr =
00067 ACE_reinterpret_cast (ACE_Method_Request *,
00068 mb->base ());
00069
00070 mb->release ();
00071 return mr;
00072 }
00073 else
00074 return 0;
00075 }
00076
00077 int
00078 ACE_Activation_Queue::enqueue (ACE_Method_Request *mr,
00079 ACE_Time_Value *tv)
00080 {
00081 ACE_Message_Block *mb;
00082
00083
00084
00085
00086 ACE_NEW_MALLOC_RETURN (mb,
00087 ACE_static_cast(ACE_Message_Block *,
00088 this->allocator_->malloc (sizeof (ACE_Message_Block))),
00089 ACE_Message_Block (sizeof (*mr),
00090 ACE_Message_Block::MB_DATA,
00091 0,
00092 (char *) mr,
00093 0,
00094 0,
00095 mr->priority (),
00096 ACE_Time_Value::zero,
00097 ACE_Time_Value::max_time,
00098 this->data_block_allocator_,
00099 this->allocator_),
00100 -1);
00101
00102
00103 int result = this->queue_->enqueue_prio (mb, tv);
00104
00105
00106 if (result == -1)
00107 ACE_DES_FREE (mb, this->allocator_->free, ACE_Message_Block);
00108
00109 return result;
00110 }