aboutsummaryrefslogtreecommitdiff
path: root/dep/ACE_wrappers/ace/Cleanup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dep/ACE_wrappers/ace/Cleanup.cpp')
-rw-r--r--dep/ACE_wrappers/ace/Cleanup.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/dep/ACE_wrappers/ace/Cleanup.cpp b/dep/ACE_wrappers/ace/Cleanup.cpp
index e71b082982d..960e74fffa4 100644
--- a/dep/ACE_wrappers/ace/Cleanup.cpp
+++ b/dep/ACE_wrappers/ace/Cleanup.cpp
@@ -1,35 +1,47 @@
// $Id: Cleanup.cpp 80826 2008-03-04 14:51:23Z wotte $
+
#include "ace/Cleanup.h"
+
ACE_RCSID (ace,
Cleanup,
"$Id: Cleanup.cpp 80826 2008-03-04 14:51:23Z wotte $")
+
#if !defined (ACE_HAS_INLINED_OSCALLS)
# include "ace/Cleanup.inl"
#endif /* ACE_HAS_INLINED_OSCALLS */
+
#include "ace/OS_Memory.h"
+
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
void
ACE_Cleanup::cleanup (void *)
{
delete this;
}
+
ACE_Cleanup::~ACE_Cleanup (void)
{
}
+
/*****************************************************************************/
+
extern "C" void
ACE_CLEANUP_DESTROYER_NAME (ACE_Cleanup *object, void *param)
{
object->cleanup (param);
}
+
/*****************************************************************************/
+
ACE_Cleanup_Info::ACE_Cleanup_Info (void)
: object_ (0),
cleanup_hook_ (0),
param_ (0)
{
}
+
bool
ACE_Cleanup_Info::operator== (const ACE_Cleanup_Info &o) const
{
@@ -37,12 +49,15 @@ ACE_Cleanup_Info::operator== (const ACE_Cleanup_Info &o) const
&& o.cleanup_hook_ == this->cleanup_hook_
&& o.param_ == this->param_;
}
+
bool
ACE_Cleanup_Info::operator!= (const ACE_Cleanup_Info &o) const
{
return !(*this == o);
}
+
/*****************************************************************************/
+
/**
* @class ACE_Cleanup_Info_Node
*
@@ -61,42 +76,53 @@ public:
private:
ACE_Cleanup_Info cleanup_info_;
ACE_Cleanup_Info_Node *next_;
+
friend class ACE_OS_Exit_Info;
};
+
ACE_Cleanup_Info_Node::ACE_Cleanup_Info_Node (void)
: cleanup_info_ (),
next_ (0)
{
}
+
ACE_Cleanup_Info_Node::ACE_Cleanup_Info_Node (const ACE_Cleanup_Info &new_info,
ACE_Cleanup_Info_Node *next)
: cleanup_info_ (new_info),
next_ (next)
{
}
+
ACE_Cleanup_Info_Node::~ACE_Cleanup_Info_Node (void)
{
delete next_;
}
+
ACE_Cleanup_Info_Node *
ACE_Cleanup_Info_Node::insert (const ACE_Cleanup_Info &new_info)
{
ACE_Cleanup_Info_Node *new_node = 0;
+
ACE_NEW_RETURN (new_node,
ACE_Cleanup_Info_Node (new_info, this),
0);
+
return new_node;
}
+
/*****************************************************************************/
+
ACE_OS_Exit_Info::ACE_OS_Exit_Info (void)
{
ACE_NEW (registered_objects_, ACE_Cleanup_Info_Node);
}
+
ACE_OS_Exit_Info::~ACE_OS_Exit_Info (void)
{
delete registered_objects_;
registered_objects_ = 0;
}
+
int
ACE_OS_Exit_Info::at_exit_i (void *object,
ACE_CLEANUP_FUNC cleanup_hook,
@@ -106,9 +132,12 @@ ACE_OS_Exit_Info::at_exit_i (void *object,
new_info.object_ = object;
new_info.cleanup_hook_ = cleanup_hook;
new_info.param_ = param;
+
// 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;
+
if ((new_node = registered_objects_->insert (new_info)) == 0)
return -1;
else
@@ -117,6 +146,7 @@ ACE_OS_Exit_Info::at_exit_i (void *object,
return 0;
}
}
+
int
ACE_OS_Exit_Info::find (void *object)
{
@@ -131,8 +161,10 @@ ACE_OS_Exit_Info::find (void *object)
return 1;
}
}
+
return 0;
}
+
void
ACE_OS_Exit_Info::call_hooks (void)
{
@@ -156,5 +188,6 @@ ACE_OS_Exit_Info::call_hooks (void)
(*info.cleanup_hook_) (info.object_, info.param_);
}
}
+
ACE_END_VERSIONED_NAMESPACE_DECL