version 1.32, 2002/07/26 20:01:19
|
version 1.38, 2004/10/17 20:39:17
|
|
|
//%///////////-*-c++-*-///////////////////////////////////////////////////////// |
//%2004//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// The Open Group, Tivoli Systems |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation, The Open Group. |
|
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
// Author: Mike Day (mdday@us.ibm.com) <<< Wed Mar 13 20:49:40 2002 mdd >>> | // Author: Mike Day (mdday@us.ibm.com) <<< Wed Mar 13 20:49:40 2002 mdd >>> |
// | // |
// Modified By: |
// Modified By: Amit K Arora, IBM (amita@in.ibm.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <Pegasus/Common/Message.h> | #include <Pegasus/Common/Message.h> |
#include <Pegasus/Common/Exception.h> |
#include <Pegasus/Common/InternalException.h> |
#include <Pegasus/Common/IPC.h> | #include <Pegasus/Common/IPC.h> |
#include <Pegasus/Common/Thread.h> | #include <Pegasus/Common/Thread.h> |
#include <Pegasus/Common/AsyncOpNode.h> | #include <Pegasus/Common/AsyncOpNode.h> |
|
|
#include <Pegasus/Common/MessageQueueService.h> | #include <Pegasus/Common/MessageQueueService.h> |
#include <Pegasus/Common/peg_authorization.h> | #include <Pegasus/Common/peg_authorization.h> |
#include <Pegasus/Common/Linkage.h> | #include <Pegasus/Common/Linkage.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
| |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
|
|
| |
| |
Mutex _thread_safety; | Mutex _thread_safety; |
ModuleController *_controller; |
AutoPtr<ModuleController> _controller;//PEP101 |
String _name; | String _name; |
AtomicInt _reference_count; | AtomicInt _reference_count; |
AtomicInt _shutting_down; | AtomicInt _shutting_down; |
|
|
| |
private: | private: |
| |
module_rep *_rep; |
AutoPtr<module_rep> _rep;//PEP101 |
| |
pegasus_module(void) | pegasus_module(void) |
{ | { |
|
|
~callback_handle() | ~callback_handle() |
{ | { |
if( _module->get_name() == String(PEGASUS_MODULENAME_TEMP) ) | if( _module->get_name() == String(PEGASUS_MODULENAME_TEMP) ) |
delete _module; |
// delete _module; |
|
_module.reset(); |
} | } |
| |
pegasus_module * _module; |
AutoPtr<pegasus_module> _module;//PEP101 |
void *_parm; | void *_parm; |
}; | }; |
| |
|
|
void (*shutdown_notify)(Uint32, void *), | void (*shutdown_notify)(Uint32, void *), |
pegasus_module **instance = NULL) | pegasus_module **instance = NULL) |
| |
throw(AlreadyExists, IncompatibleTypes); |
throw(AlreadyExistsException, IncompatibleTypesException); |
| |
Boolean deregister_module(const String & module_name) | Boolean deregister_module(const String & module_name) |
throw(Permission); | throw(Permission); |
|
|
| |
static ModuleController & get_client_handle(const pegasus_identity & id, | static ModuleController & get_client_handle(const pegasus_identity & id, |
client_handle **handle) | client_handle **handle) |
throw(IncompatibleTypes); |
throw(IncompatibleTypesException); |
| |
static ModuleController & get_client_handle(const char *controller, | static ModuleController & get_client_handle(const char *controller, |
const pegasus_identity & id, | const pegasus_identity & id, |
client_handle **handle) | client_handle **handle) |
throw(IncompatibleTypes); |
throw(IncompatibleTypesException); |
| |
| |
void return_client_handle(client_handle *handle); | void return_client_handle(client_handle *handle); |
|
|
virtual void _handle_async_callback(AsyncOpNode *op); | virtual void _handle_async_callback(AsyncOpNode *op); |
| |
private: | private: |
|
|
|
|
|
class _module_lock |
|
{ |
|
public: |
|
_module_lock(DQueue<pegasus_module> * list) |
|
:_list(list) |
|
{ |
|
_list->lock(); |
|
|
|
} |
|
~_module_lock(void) |
|
{ |
|
_list->unlock(); |
|
} |
|
|
|
|
|
private: |
|
_module_lock(); |
|
DQueue<pegasus_module> * _list; |
|
}; |
|
|
|
|
|
|
static void _async_handleEnqueue(AsyncOpNode *h, MessageQueue *q, void *parm); | static void _async_handleEnqueue(AsyncOpNode *h, MessageQueue *q, void *parm); |
DQueue<pegasus_module> _modules; | DQueue<pegasus_module> _modules; |
pegasus_module _internal_module; | pegasus_module _internal_module; |
|
|
| |
| |
| |
|
|
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
| |