ACE
6.4.2
|
This class is a singleton and serves as a factory and repository for instances of ACE_DLL_Handle. More...
#include <DLL_Manager.h>
Public Types | |
enum | { DEFAULT_SIZE = ACE_DEFAULT_DLL_MANAGER_SIZE } |
Public Member Functions | |
ACE_DLL_Handle * | open_dll (const ACE_TCHAR *dll_name, int openmode, ACE_SHLIB_HANDLE handle, ACE_DLL_Handle::ERROR_STACK *errors=0) |
int | close_dll (const ACE_TCHAR *dll_name) |
Close the underlying dll. Decrements the refcount. More... | |
u_long | unload_policy (void) const |
Returns the current per-process UNLOAD_POLICY. More... | |
void | unload_policy (u_long unload_policy) |
Static Public Member Functions | |
static ACE_DLL_Manager * | instance (int size=ACE_DLL_Manager::DEFAULT_SIZE) |
Return a unique instance. More... | |
Public Attributes | |
ACE_ALLOC_HOOK_DECLARE | |
Protected Member Functions | |
ACE_DLL_Manager (int size=ACE_DLL_Manager::DEFAULT_SIZE) | |
Default constructor. More... | |
~ACE_DLL_Manager (void) | |
Destructor. More... | |
int | open (int size) |
Allocate handle_vector_. More... | |
int | close (void) |
Close all open dlls and deallocate memory. More... | |
ACE_DLL_Handle * | find_dll (const ACE_TCHAR *dll_name) const |
Find dll in handle_vector_. More... | |
int | unload_dll (ACE_DLL_Handle *dll_handle, int force_unload=0) |
Applies strategy for unloading dll. More... | |
Private Member Functions | |
ACE_DLL_Manager (const ACE_DLL_Manager &) | |
Disallow copying and assignment since we don't handle these. More... | |
void | operator= (const ACE_DLL_Manager &) |
Static Private Member Functions | |
static void | close_singleton (void) |
Close the singleton instance. More... | |
Private Attributes | |
ACE_DLL_Handle ** | handle_vector_ |
Vector containing all loaded handle objects. More... | |
int | current_size_ |
Current number of handles. More... | |
int | total_size_ |
Maximum number of handles. More... | |
u_long | unload_policy_ |
Unload strategy. More... | |
Static Private Attributes | |
static ACE_DLL_Manager * | instance_ = 0 |
Pointer to a process-wide ACE_DLL_Manager. More... | |
Friends | |
class | ACE_Framework_Repository |
class | ACE_Object_Manager |
This class is a singleton and serves as a factory and repository for instances of ACE_DLL_Handle.
This class is a singleton whose lifetime is managed by the ACE_Framework_Repository. Although it is normally meant to be used directly only by ACE_DLL, applications can call the unload_policy() methods in order get/set the the dll unload policy. Unload policies include per_process/per-dll and eager/lazy. Dlls can export set their own policy by using the ACE_DLL_UNLOAD_POLICY macro found in config-all.h. If a dll choses to set an unload policy, it will be used when the per-dll policy (the default) is in effect. If the per-dll policy is in effect and a dll has not chosen to set a policy, the current per-process policy will be used.
The following policy macros are provided in config-all.h:
ACE_DLL_UNLOAD_POLICY_PER_PROCESS - Per-process policy that unloads dlls eagerly.
ACE_DLL_UNLOAD_POLICY_PER_DLL - Apply policy on a per-dll basis. If the dll doesn't use one of the macros below, the current per-process policy will be used.
ACE_DLL_UNLOAD_POLICY_LAZY - Don't unload dll when refcount reaches zero, i.e., wait for either an explicit unload request or program exit.
ACE_DLL_UNLOAD_POLICY_DEFAULT - Default policy allows dlls to control their own destinies, but will unload those that don't make a choice eagerly.
|
protected |
Default constructor.
|
protected |
Destructor.
|
private |
Disallow copying and assignment since we don't handle these.
|
protected |
Close all open dlls and deallocate memory.
int ACE_DLL_Manager::close_dll | ( | const ACE_TCHAR * | dll_name | ) |
Close the underlying dll. Decrements the refcount.
|
staticprivate |
Close the singleton instance.
|
protected |
Find dll in handle_vector_.
|
static |
Return a unique instance.
|
protected |
Allocate handle_vector_.
ACE_DLL_Handle * ACE_DLL_Manager::open_dll | ( | const ACE_TCHAR * | dll_name, |
int | openmode, | ||
ACE_SHLIB_HANDLE | handle, | ||
ACE_DLL_Handle::ERROR_STACK * | errors = 0 |
||
) |
Factory for ACE_DLL_Handle objects. If one already exits, its refcount is incremented.
|
private |
|
protected |
Applies strategy for unloading dll.
u_long ACE_DLL_Manager::unload_policy | ( | void | ) | const |
Returns the current per-process UNLOAD_POLICY.
void ACE_DLL_Manager::unload_policy | ( | u_long | unload_policy | ) |
Set the per-process UNLOAD_POLICY. If the policy is changed from LAZY to EAGER, then it will also unload any dlls with zero refcounts.
|
friend |
|
friend |
ACE_DLL_Manager::ACE_ALLOC_HOOK_DECLARE |
|
private |
Current number of handles.
|
private |
Vector containing all loaded handle objects.
|
staticprivate |
Pointer to a process-wide ACE_DLL_Manager.
|
private |
Maximum number of handles.
|
private |
Unload strategy.