ACE_POSIX_AIOCB_Proactor Class Reference

This Proactor makes use of Asynchronous I/O Control Blocks (AIOCB) to notify/get the completion status of the <aio_> operations issued. More...

#include <POSIX_Proactor.h>

Inheritance diagram for ACE_POSIX_AIOCB_Proactor:

Inheritance graph
[legend]
Collaboration diagram for ACE_POSIX_AIOCB_Proactor:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ACE_POSIX_AIOCB_Proactor (size_t nmaxop=ACE_AIO_DEFAULT_SIZE)
virtual Proactor_Type get_impl_type (void)
virtual ~ACE_POSIX_AIOCB_Proactor (void)
 Destructor.
virtual int close (void)
 Close down the Proactor.
virtual int handle_events (ACE_Time_Value &wait_time)
virtual int handle_events (void)
virtual int post_completion (ACE_POSIX_Asynch_Result *result)
 Post a result to the completion port of the Proactor.
virtual int start_aio (ACE_POSIX_Asynch_Result *result, ACE_POSIX_Proactor::Opcode op)
virtual int cancel_aio (ACE_HANDLE h)

Protected Member Functions

 ACE_POSIX_AIOCB_Proactor (size_t nmaxop, ACE_POSIX_Proactor::Proactor_Type ptype)
virtual int get_result_status (ACE_POSIX_Asynch_Result *asynch_result, int &error_status, size_t &transfer_count)
int create_result_aiocb_list (void)
 Create aiocb list.
int delete_result_aiocb_list (void)
void create_notify_manager (void)
void delete_notify_manager (void)
void check_max_aio_num (void)
void set_notify_handle (ACE_HANDLE h)
 To identify requests from Notify_Pipe_Manager.
int handle_events_i (u_long milli_seconds)
int start_deferred_aio (void)
 Start deferred AIO if necessary.
virtual int cancel_aiocb (ACE_POSIX_Asynch_Result *result)
 Cancel running or deferred AIO.
ACE_POSIX_Asynch_Resultfind_completed_aio (int &error_status, size_t &transfer_count, size_t &index, size_t &count)
 Extract the results of aio.
virtual ssize_t allocate_aio_slot (ACE_POSIX_Asynch_Result *result)
 Find free slot to store result and aiocb pointer.
virtual int start_aio_i (ACE_POSIX_Asynch_Result *result)
 Initiate an aio operation.
virtual int notify_completion (int sig_num)
int putq_result (ACE_POSIX_Asynch_Result *result)
 Put "post_completed" result into the internal queue.
ACE_POSIX_Asynch_Resultgetq_result (void)
 Get "post_completed" result from the internal queue.
int clear_result_queue (void)
 Clear the internal results queue.
int process_result_queue (void)
 Process the internal results queue.

Protected Attributes

ACE_AIOCB_Notify_Pipe_Manageraiocb_notify_pipe_manager_
aiocb ** aiocb_list_
ACE_POSIX_Asynch_Result ** result_list_
size_t aiocb_list_max_size_
 To maintain the maximum size of the array (list).
size_t aiocb_list_cur_size_
 To maintain the current size of the array (list).
ACE_SYNCH_MUTEX mutex_
 Mutex to protect work with lists.
ACE_HANDLE notify_pipe_read_handle_
size_t num_deferred_aiocb_
size_t num_started_aio_
 Number active,i.e. running requests.
ACE_Unbounded_Queue< ACE_POSIX_Asynch_Result * > result_queue_
 Queue which keeps "post_completed" ACE_POSIX_Asynch_Result's.

Friends

class ACE_AIOCB_Notify_Pipe_Manager
 Handler needs to call application specific code.
class ACE_POSIX_Asynch_Operation
class ACE_POSIX_Asynch_Accept
class ACE_POSIX_Asynch_Connect

Detailed Description

This Proactor makes use of Asynchronous I/O Control Blocks (AIOCB) to notify/get the completion status of the <aio_> operations issued.


Constructor & Destructor Documentation

ACE_POSIX_AIOCB_Proactor::ACE_POSIX_AIOCB_Proactor size_t  nmaxop = ACE_AIO_DEFAULT_SIZE  ) 
 

Constructor defines max number asynchronous operations which can be started at the same time

ACE_POSIX_AIOCB_Proactor::~ACE_POSIX_AIOCB_Proactor void   )  [virtual]
 

Destructor.

ACE_POSIX_AIOCB_Proactor::ACE_POSIX_AIOCB_Proactor size_t  nmaxop,
ACE_POSIX_Proactor::Proactor_Type  ptype
[protected]
 

Special constructor for ACE_SUN_Proactor and ACE_POSIX_SIG_Proactor


Member Function Documentation

ssize_t ACE_POSIX_AIOCB_Proactor::allocate_aio_slot ACE_POSIX_Asynch_Result result  )  [protected, virtual]
 

Find free slot to store result and aiocb pointer.

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::cancel_aio ACE_HANDLE  h  )  [virtual]
 

This method should be called from ACE_POSIX_Asynch_Operation::cancel() instead of usual aio_cancel. For all deferred AIO requests with handle "h" it removes its from the lists and notifies user. For all running AIO requests with handle "h" it calls aio_cancel. According to the POSIX standards we will receive ECANCELED for all aio_canceled AIO requests later on return from aio_suspend

Implements ACE_POSIX_Proactor.

int ACE_POSIX_AIOCB_Proactor::cancel_aiocb ACE_POSIX_Asynch_Result result  )  [protected, virtual]
 

Cancel running or deferred AIO.

void ACE_POSIX_AIOCB_Proactor::check_max_aio_num void   )  [protected]
 

Define the maximum number of asynchronous I/O requests for the current OS

int ACE_POSIX_AIOCB_Proactor::clear_result_queue void   )  [protected]
 

Clear the internal results queue.

int ACE_POSIX_AIOCB_Proactor::close void   )  [virtual]
 

Close down the Proactor.

Reimplemented from ACE_POSIX_Proactor.

void ACE_POSIX_AIOCB_Proactor::create_notify_manager void   )  [protected]
 

Call these methods from derived class when virtual table is built.

int ACE_POSIX_AIOCB_Proactor::create_result_aiocb_list void   )  [protected]
 

Create aiocb list.

void ACE_POSIX_AIOCB_Proactor::delete_notify_manager void   )  [protected]
 

int ACE_POSIX_AIOCB_Proactor::delete_result_aiocb_list void   )  [protected]
 

Call this method from derived class when virtual table is built.

ACE_POSIX_Asynch_Result * ACE_POSIX_AIOCB_Proactor::find_completed_aio int &  error_status,
size_t &  transfer_count,
size_t &  index,
size_t &  count
[protected]
 

Extract the results of aio.

ACE_INLINE ACE_POSIX_Proactor::Proactor_Type ACE_POSIX_AIOCB_Proactor::get_impl_type void   )  [virtual]
 

Reimplemented from ACE_POSIX_Proactor.

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::get_result_status ACE_POSIX_Asynch_Result asynch_result,
int &  error_status,
size_t &  transfer_count
[protected, virtual]
 

Check AIO for completion, error and result status Return: 1 - AIO completed , 0 - not completed yet

ACE_POSIX_Asynch_Result * ACE_POSIX_AIOCB_Proactor::getq_result void   )  [protected]
 

Get "post_completed" result from the internal queue.

int ACE_POSIX_AIOCB_Proactor::handle_events void   )  [virtual]
 

Block indefinitely until at least one event is dispatched. Dispatch a single set of events. If <wait_time> elapses before any events occur, return 0. Return 1 on success i.e., when a completion is dispatched, non-zero (-1) on errors and errno is set accordingly.

Implements ACE_POSIX_Proactor.

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::handle_events ACE_Time_Value wait_time  )  [virtual]
 

Dispatch a single set of events. If <wait_time> elapses before any events occur, return 0. Return 1 on success i.e., when a completion is dispatched, non-zero (-1) on errors and errno is set accordingly.

Implements ACE_POSIX_Proactor.

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::handle_events_i u_long  milli_seconds  )  [protected]
 

Dispatch a single set of events. If <milli_seconds> elapses before any events occur, return 0. Return 1 if a completion dispatched. Return -1 on errors.

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::notify_completion int  sig_num  )  [protected, virtual]
 

Notify queue of "post_completed" ACE_POSIX_Asynch_Results called from post_completion method

Reimplemented in ACE_POSIX_CB_Proactor.

int ACE_POSIX_AIOCB_Proactor::post_completion ACE_POSIX_Asynch_Result result  )  [virtual]
 

Post a result to the completion port of the Proactor.

Implements ACE_POSIX_Proactor.

int ACE_POSIX_AIOCB_Proactor::process_result_queue void   )  [protected]
 

Process the internal results queue.

int ACE_POSIX_AIOCB_Proactor::putq_result ACE_POSIX_Asynch_Result result  )  [protected]
 

Put "post_completed" result into the internal queue.

void ACE_POSIX_AIOCB_Proactor::set_notify_handle ACE_HANDLE  h  )  [protected]
 

To identify requests from Notify_Pipe_Manager.

int ACE_POSIX_AIOCB_Proactor::start_aio ACE_POSIX_Asynch_Result result,
ACE_POSIX_Proactor::Opcode  op
[virtual]
 

Implements ACE_POSIX_Proactor.

int ACE_POSIX_AIOCB_Proactor::start_aio_i ACE_POSIX_Asynch_Result result  )  [protected, virtual]
 

Initiate an aio operation.

int ACE_POSIX_AIOCB_Proactor::start_deferred_aio void   )  [protected]
 

Start deferred AIO if necessary.


Friends And Related Function Documentation

friend class ACE_AIOCB_Notify_Pipe_Manager [friend]
 

Handler needs to call application specific code.

friend class ACE_POSIX_Asynch_Accept [friend]
 

friend class ACE_POSIX_Asynch_Connect [friend]
 

friend class ACE_POSIX_Asynch_Operation [friend]
 

This class does the registering of Asynch Operations with the Proactor which is necessary in the AIOCB strategy.


Member Data Documentation

aiocb** ACE_POSIX_AIOCB_Proactor::aiocb_list_ [protected]
 

Use a dynamically allocated array to keep track of all the aio's issued currently.

size_t ACE_POSIX_AIOCB_Proactor::aiocb_list_cur_size_ [protected]
 

To maintain the current size of the array (list).

size_t ACE_POSIX_AIOCB_Proactor::aiocb_list_max_size_ [protected]
 

To maintain the maximum size of the array (list).

ACE_AIOCB_Notify_Pipe_Manager* ACE_POSIX_AIOCB_Proactor::aiocb_notify_pipe_manager_ [protected]
 

This class takes care of doing <accept> when we use AIO_CONTROL_BLOCKS strategy.

ACE_SYNCH_MUTEX ACE_POSIX_AIOCB_Proactor::mutex_ [protected]
 

Mutex to protect work with lists.

ACE_HANDLE ACE_POSIX_AIOCB_Proactor::notify_pipe_read_handle_ [protected]
 

The purpose of this member is only to identify asynchronous request from NotifyManager. We will reserve for it always slot 0 in the list of aiocb's to be sure that don't lose notifications.

size_t ACE_POSIX_AIOCB_Proactor::num_deferred_aiocb_ [protected]
 

Number of ACE_POSIX_Asynch_Result's waiting for start i.e. deferred AIOs

size_t ACE_POSIX_AIOCB_Proactor::num_started_aio_ [protected]
 

Number active,i.e. running requests.

ACE_POSIX_Asynch_Result** ACE_POSIX_AIOCB_Proactor::result_list_ [protected]
 

ACE_Unbounded_Queue<ACE_POSIX_Asynch_Result *> ACE_POSIX_AIOCB_Proactor::result_queue_ [protected]
 

Queue which keeps "post_completed" ACE_POSIX_Asynch_Result's.


The documentation for this class was generated from the following files:
Generated on Wed Nov 23 15:49:39 2005 for ACE by  doxygen 1.4.5