src/share/vm/runtime/arguments.hpp

Print this page

        

*** 116,140 **** // For use by -agentlib, -agentpath and -Xrun class AgentLibrary : public CHeapObj<mtInternal> { friend class AgentLibraryList; private: char* _name; char* _options; void* _os_lib; bool _is_absolute_path; AgentLibrary* _next; public: // Accessors const char* name() const { return _name; } char* options() const { return _options; } bool is_absolute_path() const { return _is_absolute_path; } void* os_lib() const { return _os_lib; } ! void set_os_lib(void* os_lib) { _os_lib = os_lib; } AgentLibrary* next() const { return _next; } // Constructor AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) { _name = AllocateHeap(strlen(name)+1, mtInternal); strcpy(_name, name); --- 116,155 ---- // For use by -agentlib, -agentpath and -Xrun class AgentLibrary : public CHeapObj<mtInternal> { friend class AgentLibraryList; + public: + // Is this library valid or not. Don't rely on os_lib == NULL as statically + // linked lib could have handle of RTLD_DEFAULT which == 0 on some platforms + enum AgentState { + agent_invalid = 0, + agent_valid = 1 + }; + private: char* _name; char* _options; void* _os_lib; bool _is_absolute_path; + bool _is_static_lib; + AgentState _state; AgentLibrary* _next; public: // Accessors const char* name() const { return _name; } char* options() const { return _options; } bool is_absolute_path() const { return _is_absolute_path; } void* os_lib() const { return _os_lib; } ! void set_os_lib(void* os_lib) { _os_lib = os_lib;} AgentLibrary* next() const { return _next; } + bool is_static_lib() const { return _is_static_lib; } + void set_static_lib(bool static_lib) { _is_static_lib = static_lib; } + bool valid() { return (_state == agent_valid); } + void set_valid() { _state = agent_valid; } + void set_invalid() { _state = agent_invalid; } // Constructor AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) { _name = AllocateHeap(strlen(name)+1, mtInternal); strcpy(_name, name);
*** 145,154 **** --- 160,171 ---- strcpy(_options, options); } _is_absolute_path = is_absolute_path; _os_lib = os_lib; _next = NULL; + _state = agent_invalid; + _is_static_lib = false; } }; // maintain an order of entry list of AgentLibrary class AgentLibraryList VALUE_OBJ_CLASS_SPEC {
*** 275,284 **** --- 292,303 ---- static AgentLibraryList _agentList; static void add_init_agent(const char* name, char* options, bool absolute_path) { _agentList.add(new AgentLibrary(name, options, absolute_path, NULL)); } // Late-binding agents not started via arguments + static void add_loaded_agent(AgentLibrary *agentLib) + { _agentList.add(agentLib); } static void add_loaded_agent(const char* name, char* options, bool absolute_path, void* os_lib) { _agentList.add(new AgentLibrary(name, options, absolute_path, os_lib)); } // Operation modi static Mode _mode;