#include <Incoming_Message_Queue.h>
Collaboration diagram for TAO_Incoming_Message_Queue:
Public Member Functions | |
TAO_Incoming_Message_Queue (TAO_ORB_Core *orb_core) | |
Constructor. | |
~TAO_Incoming_Message_Queue (void) | |
Destructor. | |
TAO_Queued_Data * | dequeue_head (void) |
Adding and deleting a node from the queue. | |
TAO_Queued_Data * | dequeue_tail (void) |
int | enqueue_tail (TAO_Queued_Data *nd) |
CORBA::ULong | queue_length (void) const |
Return the length of the queue.. | |
Private Attributes | |
TAO_Queued_Data * | last_added_ |
A circular linked list of messages awaiting processing. | |
CORBA::ULong | size_ |
The size of the queue. | |
TAO_ORB_Core * | orb_core_ |
Copy of our ORB Core. | |
Friends | |
class | TAO_Transport |
Please read the documentation in the TAO_Transport class to find out more about the design of the incoming data path.
Under certain conditions TAO may have to maintain a queue per-connection. This queue is drained by the pluggable protocols framework, normally under control of the ACE_Reactor, but other configurations are conceivable.
The memory that is allocated for holding the messages comes from the global pool for the following reasons
Definition at line 58 of file Incoming_Message_Queue.h.
|
Constructor.
Definition at line 19 of file Incoming_Message_Queue.cpp.
00020 : last_added_ (0), 00021 size_ (0), 00022 orb_core_ (orb_core) 00023 { 00024 } |
|
Destructor.
Definition at line 26 of file Incoming_Message_Queue.cpp. References dequeue_head(), and TAO_Queued_Data::release().
00027 { 00028 const CORBA::ULong sz = this->size_; 00029 00030 // Delete all the nodes left behind 00031 for (CORBA::ULong i = 0; 00032 i < sz; 00033 ++i) 00034 { 00035 TAO_Queued_Data *qd = this->dequeue_head (); 00036 TAO_Queued_Data::release (qd); 00037 } 00038 } |
|
Adding and deleting a node from the queue.
Definition at line 42 of file Incoming_Message_Queue.cpp. References last_added_, and TAO_Queued_Data::next_. Referenced by TAO_Transport::process_queue_head(), and ~TAO_Incoming_Message_Queue().
00043 { 00044 if (this->size_ == 0) 00045 return 0; 00046 00047 // Get the node on the head of the queue... 00048 TAO_Queued_Data * const head = this->last_added_->next_; 00049 00050 // Reset the head node.. 00051 this->last_added_->next_ = head->next_; 00052 00053 // Decrease the size and reset last_added_ if empty 00054 if (--this->size_ == 0) 00055 this->last_added_ = 0; 00056 00057 return head; 00058 } |
|
Definition at line 61 of file Incoming_Message_Queue.cpp. References last_added_, and TAO_Queued_Data::next_.
00062 { 00063 // This is a bit painful stuff... 00064 if (this->size_ == 0) 00065 return 0; 00066 00067 // Get the node on the head of the queue... 00068 TAO_Queued_Data *head = 00069 this->last_added_->next_; 00070 00071 while (head->next_ != this->last_added_) 00072 { 00073 head = head->next_; 00074 } 00075 00076 // Put the head in tmp. 00077 head->next_ = this->last_added_->next_; 00078 00079 TAO_Queued_Data *ret_qd = this->last_added_; 00080 00081 this->last_added_ = head; 00082 00083 // Decrease the size 00084 if (--this->size_ == 0) 00085 this->last_added_ = 0; 00086 00087 return ret_qd; 00088 } |
|
Definition at line 91 of file Incoming_Message_Queue.cpp. References last_added_, and TAO_Queued_Data::next_. Referenced by TAO_Transport::consolidate_enqueue_message().
00092 { 00093 if (this->size_ == 0) 00094 { 00095 this->last_added_ = nd; 00096 this->last_added_->next_ = this->last_added_; 00097 } 00098 else 00099 { 00100 nd->next_ = this->last_added_->next_; 00101 this->last_added_->next_ = nd; 00102 this->last_added_ = nd; 00103 } 00104 00105 ++ this->size_; 00106 return 0; 00107 } |
|
Return the length of the queue..
Definition at line 11 of file Incoming_Message_Queue.inl. Referenced by TAO_Transport::handle_input_parse_data(), and TAO_Transport::process_queue_head().
00012 { 00013 return this->size_; 00014 } |
|
Definition at line 78 of file Incoming_Message_Queue.h. |
|
A circular linked list of messages awaiting processing. last_message_added_ points to the most recent message added to the list. The earliest addition can be easily accessed via last_message_added_->next_. Definition at line 88 of file Incoming_Message_Queue.h. Referenced by dequeue_head(), dequeue_tail(), and enqueue_tail(). |
|
Copy of our ORB Core.
Definition at line 94 of file Incoming_Message_Queue.h. |
|
The size of the queue.
Definition at line 91 of file Incoming_Message_Queue.h. |