ACE  6.1.0
Public Member Functions | Protected Member Functions | Protected Attributes | Friends
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_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 ( 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 ( 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_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

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

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

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

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.

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.

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

Number active,i.e. running requests.

Queue which keeps "post_completed" ACE_POSIX_Asynch_Result's.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines