diff options
author | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-08-24 12:47:54 +0000 |
---|---|---|
committer | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-08-24 12:47:54 +0000 |
commit | bfc3c9ef0aeb7ad8eb2628b81d250eb57ca9a684 (patch) | |
tree | 9e60f7980ca23e55ac35d57d0e436a55f6dc6bbf /ace/Object_Manager.cpp | |
parent | 2efccda06a73a402fd0775ae4e5ecc5a6ccf4849 (diff) | |
download | ATCD-bfc3c9ef0aeb7ad8eb2628b81d250eb57ca9a684.tar.gz |
ChangeLogTag: Tue Aug 24 07:11:52 1999 David L. Levine <levine@cs.wustl.edu>
Diffstat (limited to 'ace/Object_Manager.cpp')
-rw-r--r-- | ace/Object_Manager.cpp | 99 |
1 files changed, 7 insertions, 92 deletions
diff --git a/ace/Object_Manager.cpp b/ace/Object_Manager.cpp index 58aa8d754a7..0c1136245c3 100644 --- a/ace/Object_Manager.cpp +++ b/ace/Object_Manager.cpp @@ -154,26 +154,6 @@ ACE_Object_Manager_Preallocations::~ACE_Object_Manager_Preallocations (void) { } -class ACE_Cleanup_Info_Node -{ - // = TITLE - // For maintaining a list of ACE_Cleanup_Info items. - // - // = DESCRIPTION - // For internal use by ACE_Object_Manager. -public: - ACE_Cleanup_Info_Node (void); - ACE_Cleanup_Info_Node (const ACE_Cleanup_Info &new_info, - ACE_Cleanup_Info_Node *next); - ~ACE_Cleanup_Info_Node (void); - ACE_Cleanup_Info_Node *insert (const ACE_Cleanup_Info &); -private: - ACE_Cleanup_Info cleanup_info_; - ACE_Cleanup_Info_Node *next_; - - friend class ACE_Object_Manager; -}; - int ACE_Object_Manager::starting_up (void) { @@ -240,13 +220,6 @@ ACE_Object_Manager::init (void) # endif /* ACE_MT_SAFE */ } - // Do this after the allocation of ACE_STATIC_OBJECT_LOCK. It - // shouldn't matter, but just in case - // ACE_Static_Object_Lock::instance () gets changed . . . - ACE_NEW_RETURN (registered_objects_, - ACE_Cleanup_Info_Node, - -1); - if (this == instance_) { // Hooks for preallocated objects and arrays provided by application. @@ -282,7 +255,7 @@ ACE_Object_Manager::init (void) ACE_Object_Manager::ACE_Object_Manager (void) // With ACE_HAS_TSS_EMULATION, ts_storage_ is initialized by the call to // ACE_OS::tss_open () in the function body. - : registered_objects_ (0) + : exit_info_ () , preallocations_ (0) , default_mask_ (0) , ace_service_config_sig_handler_ (0) @@ -358,28 +331,14 @@ ACE_Object_Manager::at_exit_i (void *object, return -1; } - // Check for already in queue, and return 1 if so. - for (ACE_Cleanup_Info_Node *iter = registered_objects_; - iter && iter->next_ != 0; - iter = iter->next_) + if (exit_info_.find (object)) { - if (iter->cleanup_info_.object_ == object) - { - // The object has already been registered. - errno = EEXIST; - return -1; - } + // The object has already been registered. + errno = EEXIST; + return -1; } - ACE_Cleanup_Info new_info; - 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. - registered_objects_ = registered_objects_->insert (new_info); - return registered_objects_ == 0 ? -1 : 0; + return exit_info_.at_exit_i (object, cleanup_hook, param); } #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) @@ -626,17 +585,7 @@ ACE_Object_Manager::fini (void) // Call all registered cleanup hooks, in reverse order of // registration. - for (ACE_Cleanup_Info_Node *iter = registered_objects_; - iter && iter->next_ != 0; - iter = iter->next_) - { - ACE_Cleanup_Info &info = iter->cleanup_info_; - if (info.cleanup_hook_ == (ACE_CLEANUP_FUNC) ace_cleanup_destroyer) - // The object is an ACE_Cleanup. - ace_cleanup_destroyer ((ACE_Cleanup *) info.object_, info.param_); - else - (*info.cleanup_hook_) (info.object_, info.param_); - } + exit_info_.call_hooks (); if (this == instance_) { @@ -711,9 +660,6 @@ ACE_Object_Manager::fini (void) delete ace_service_config_sig_handler_; ace_service_config_sig_handler_ = 0; - delete registered_objects_; - registered_objects_ = 0; - #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) delete internal_lock_; internal_lock_ = 0; @@ -744,37 +690,6 @@ ACE_Object_Manager::fini (void) } -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; - - ACE_NEW_RETURN (new_node, - ACE_Cleanup_Info_Node (new_info, this), - 0); - - return new_node; -} - - #if !defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) class ACE_Export ACE_Object_Manager_Manager // = TITLE |