Public Member Functions | Private Attributes

ACE_OS_Exit_Info Class Reference

Hold Object Manager cleanup (exit) information. More...

#include <Cleanup.h>

Collaboration diagram for ACE_OS_Exit_Info:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ACE_OS_Exit_Info (void)
 Default constructor.
 ~ACE_OS_Exit_Info (void)
 Destructor.
int at_exit_i (void *object, ACE_CLEANUP_FUNC cleanup_hook, void *param, const char *name=0)
 Use to register a cleanup hook.
bool find (void *object)
bool remove (void *object)
void call_hooks ()

Private Attributes

ACE_Cleanup_Info_Node_List registered_objects_

Detailed Description

Hold Object Manager cleanup (exit) information.

For internal use only.

For internal use by the ACE library, only.

Definition at line 117 of file Cleanup.h.


Constructor & Destructor Documentation

ACE_OS_Exit_Info::ACE_OS_Exit_Info ( void   ) 

Default constructor.

Definition at line 81 of file Cleanup.cpp.

{
}

ACE_OS_Exit_Info::~ACE_OS_Exit_Info ( void   ) 

Destructor.

Definition at line 85 of file Cleanup.cpp.

{
}


Member Function Documentation

int ACE_OS_Exit_Info::at_exit_i ( void *  object,
ACE_CLEANUP_FUNC  cleanup_hook,
void *  param,
const char *  name = 0 
)

Use to register a cleanup hook.

Definition at line 90 of file Cleanup.cpp.

{
  // Return -1 and sets errno if unable to allocate storage.  Enqueue
  // at the head and dequeue from the head to get LIFO ordering.
  ACE_Cleanup_Info_Node *new_node = 0;

  ACE_NEW_RETURN (new_node,
                  ACE_Cleanup_Info_Node (object, cleanup_hook, param, name),
                  -1);

  registered_objects_.push_front (new_node);

  return 0;
}

void ACE_OS_Exit_Info::call_hooks ( void   ) 

Call all registered cleanup hooks, in reverse order of registration.

Definition at line 152 of file Cleanup.cpp.

{
  // Call all registered cleanup hooks, in reverse order of
  // registration.
  for (ACE_Cleanup_Info_Node *iter = registered_objects_.pop_front ();
       iter != 0;
       iter = registered_objects_.pop_front ())
    {
      if (iter->cleanup_hook () == reinterpret_cast<ACE_CLEANUP_FUNC> (
            ACE_CLEANUP_DESTROYER_NAME))
        {
          // The object is an ACE_Cleanup.
          ACE_CLEANUP_DESTROYER_NAME (
            reinterpret_cast<ACE_Cleanup *> (iter->object ()),
            iter->param ());
        }
      else if (iter->object () == &ace_exit_hook_marker)
        {
          // The hook is an ACE_EXIT_HOOK.
          (* reinterpret_cast<ACE_EXIT_HOOK> (iter->cleanup_hook ())) ();
        }
      else
        {
          (*iter->cleanup_hook ()) (iter->object (), iter->param ());
        }
      delete iter;
    }
}

bool ACE_OS_Exit_Info::find ( void *  object  ) 

Look for a registered cleanup hook object. Returns true if already registered, false if not.

Definition at line 109 of file Cleanup.cpp.

{
  for (ACE_Cleanup_Info_Node *iter = registered_objects_.head ();
       iter != 0;
       iter = iter->next ())
    {
      if (iter->object () == object)
        {
          // The object has already been registered.
          return true;
        }
    }

  return false;
}

bool ACE_OS_Exit_Info::remove ( void *  object  ) 

Remove a registered cleanup hook object. Returns true if removed false if not.

Definition at line 126 of file Cleanup.cpp.

{
  ACE_Cleanup_Info_Node *node = 0;
  for (ACE_Cleanup_Info_Node *iter = registered_objects_.head ();
       iter != 0;
       iter = iter->next ())
    {
      if (iter->object () == object)
        {
          node = iter;
          break;
        }
    }

  if (node)
    {
      registered_objects_.remove (node);
      delete node;
      return true;
    }

  return false;
}


Member Data Documentation

Keeps track of all registered objects.

Definition at line 145 of file Cleanup.h.


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