#include <Dynamic_Service_Dependency.h>
Public Member Functions | |
ACE_Dynamic_Service_Dependency (const ACE_Service_Gestalt *cfg, const ACE_TCHAR *principal) | |
ACE_Dynamic_Service_Dependency (const ACE_TCHAR *principal) | |
~ACE_Dynamic_Service_Dependency (void) | |
Private Member Functions | |
void | init (const ACE_Service_Gestalt *cfg, const ACE_TCHAR *principal) |
Private Attributes | |
ACE_DLL | tracker_ |
It is disastrous to have dynamically loadable services create and give away ownership of objects and then ending up being unloaded before all those instances have been deleted. Normally the code for such objects classes resides within the TEXT segment of the DLL, which implements the service. If a service gets removed, its DLL may be unmapped from memory and then any attempt to invoke a method on the said objects will cause SEGV.
Such instances must contain a member of ACE_Dynamic_Service_Dependency initialized with the service they depend on. ACE_Dynamic_Service_Dependency's constructor and destructor are "magical" - they work by maintaining the underlying dynamic service's DLL reference count.
ACE_Dynamic_Service_Dependency::ACE_Dynamic_Service_Dependency | ( | const ACE_Service_Gestalt * | cfg, | |
const ACE_TCHAR * | principal | |||
) |
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_Dynamic_Service_Dependency::ACE_Dynamic_Service_Dependency | ( | const ACE_TCHAR * | principal | ) |
ACE_Dynamic_Service_Dependency::~ACE_Dynamic_Service_Dependency | ( | void | ) |
void ACE_Dynamic_Service_Dependency::init | ( | const ACE_Service_Gestalt * | cfg, | |
const ACE_TCHAR * | principal | |||
) | [private] |