ACE_Static_Object_Lock Class Reference

Provide an interface to access a global lock. More...

#include <Static_Object_Lock.h>

List of all members.

Static Public Member Functions

ACE_Recursive_Thread_Mutexinstance (void)
 Static lock access point.

void cleanup_lock (void)


Detailed Description

Provide an interface to access a global lock.

This class is used to serialize the creation of static singleton objects. It really isn't needed any more, because anyone can access ACE_STATIC_OBJECT_LOCK directly. But, it is retained for backward compatibility.

Definition at line 41 of file Static_Object_Lock.h.


Member Function Documentation

void ACE_Static_Object_Lock::cleanup_lock void   )  [static]
 

For use only by ACE_Object_Manager to clean up lock if it what dynamically allocated.

Definition at line 839 of file Object_Manager.cpp.

References ACE_DES_FREE, ACE_Static_Object_Lock_lock, and ACE_Static_Object_Lock_Type.

Referenced by ACE_Object_Manager::fini().

00840 {
00841 # if defined(ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK)
00842     // It was malloc'd, so we need to explicitly call the dtor
00843     // and then free the memory.
00844     ACE_DES_FREE (ACE_Static_Object_Lock_lock,
00845                   ACE_OS::free,
00846                   ACE_Static_Object_Lock_Type);
00847 # else  /* ! ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK */
00848     delete ACE_Static_Object_Lock_lock;
00849 # endif /* ! ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK */
00850     ACE_Static_Object_Lock_lock = 0;
00851 }

ACE_Recursive_Thread_Mutex * ACE_Static_Object_Lock::instance void   )  [static]
 

Static lock access point.

Definition at line 793 of file Object_Manager.cpp.

References ACE_NEW_RETURN, ACE_Static_Object_Lock_lock, ACE_Static_Object_Lock_Type, ACE_OS::malloc(), ACE_Cleanup_Adapter< TYPE >::object(), ACE_Object_Manager::shutting_down(), and ACE_Object_Manager::starting_up().

00794 {
00795   if (ACE_Object_Manager::starting_up ()  ||
00796       ACE_Object_Manager::shutting_down ())
00797     {
00798       // The preallocated ACE_STATIC_OBJECT_LOCK has not been
00799       // constructed yet.  Therefore, the program is single-threaded
00800       // at this point.  Or, the ACE_Object_Manager instance has been
00801       // destroyed, so the preallocated lock is not available.
00802       // Allocate a lock to use, for interface compatibility, though
00803       // there should be no contention on it.
00804       if (ACE_Static_Object_Lock_lock == 0)
00805         {
00806 #     if defined (ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK)
00807         // Allocate a buffer with malloc, and then use placement
00808         // new for the object, on the malloc'd buffer.
00809         void *buffer =
00810           ACE_OS::malloc (sizeof (*ACE_Static_Object_Lock_lock));
00811         if (buffer == 0)
00812           {
00813             return 0;
00814           }
00815         ACE_NEW_RETURN (ACE_Static_Object_Lock_lock,
00816                         (buffer) ACE_Static_Object_Lock_Type (),
00817                         0);
00818 #       else   /* ! ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK */
00819         ACE_NEW_RETURN (ACE_Static_Object_Lock_lock,
00820                         ACE_Cleanup_Adapter<ACE_Recursive_Thread_Mutex>,
00821                         0);
00822 #       endif /* ! ACE_SHOULD_MALLOC_STATIC_OBJECT_LOCK */
00823         }
00824 
00825       // Can't register with the ACE_Object_Manager here!  The lock's
00826       // declaration is visible to the ACE_Object_Manager destructor,
00827       // so it will clean it up as a special case.
00828 
00829       return &ACE_Static_Object_Lock_lock->object ();
00830     }
00831   else
00832     // Return the preallocated ACE_STATIC_OBJECT_LOCK.
00833     return
00834       ACE_Managed_Object<ACE_Recursive_Thread_Mutex>::get_preallocated_object
00835         (ACE_Object_Manager::ACE_STATIC_OBJECT_LOCK);
00836 }


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 11:30:10 2006 for ACE by doxygen 1.3.6