mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Added missing dlcolse to RsPluginManager::loadPlugin.
Added proper handling of the handle of the loaded plugin. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8465 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
6a778ab904
commit
9947a21c73
@ -186,6 +186,11 @@ void RsPluginManager::stopPlugins()
|
||||
// delete _plugins[i].plugin;
|
||||
// _plugins[i].plugin = NULL;
|
||||
}
|
||||
if (_plugins[i].handle)
|
||||
{
|
||||
dlclose(_plugins[i].handle);
|
||||
_plugins[i].handle = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -321,6 +326,7 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
|
||||
std::cerr << " -> No API version number." << std::endl;
|
||||
pinfo.status = PLUGIN_STATUS_MISSING_API ;
|
||||
pinfo.info_string = "" ;
|
||||
dlclose(handle);
|
||||
return false ;
|
||||
}
|
||||
if(pinfo.svn_revision == 0)
|
||||
@ -328,6 +334,7 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
|
||||
std::cerr << " -> No svn revision number." << std::endl;
|
||||
pinfo.status = PLUGIN_STATUS_MISSING_SVN ;
|
||||
pinfo.info_string = "" ;
|
||||
dlclose(handle);
|
||||
return false ;
|
||||
}
|
||||
|
||||
@ -340,6 +347,7 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
|
||||
std::cerr << dlerror() << std::endl ;
|
||||
pinfo.status = PLUGIN_STATUS_MISSING_SYMBOL ;
|
||||
pinfo.info_string = _plugin_entry_symbol ;
|
||||
dlclose(handle);
|
||||
return false ;
|
||||
}
|
||||
std::cerr << " -> Added function entry for symbol " << _plugin_entry_symbol << std::endl ;
|
||||
@ -351,11 +359,13 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
|
||||
std::cerr << " Plugin entry function " << _plugin_entry_symbol << " returns NULL ! It should return an object of type RsPlugin* " << std::endl;
|
||||
pinfo.status = PLUGIN_STATUS_NULL_PLUGIN ;
|
||||
pinfo.info_string = "Plugin entry " + _plugin_entry_symbol + "() return NULL" ;
|
||||
dlclose(handle);
|
||||
return false ;
|
||||
}
|
||||
|
||||
pinfo.status = PLUGIN_STATUS_LOADED ;
|
||||
pinfo.plugin = p ;
|
||||
pinfo.handle = handle;
|
||||
p->setPlugInHandler(this); // WIN fix, cannot share global space with shared libraries
|
||||
pinfo.info_string = "" ;
|
||||
|
||||
|
@ -12,7 +12,14 @@ class p3LinkMgr ;
|
||||
|
||||
class PluginInfo
|
||||
{
|
||||
public:
|
||||
PluginInfo() : handle(NULL), plugin(NULL), API_version(0), svn_revision(0), status(0) {}
|
||||
|
||||
public:
|
||||
// Handle of the loaded plugin.
|
||||
//
|
||||
void *handle;
|
||||
|
||||
// Main object provided by the plugin. NULL is the plugin could not be loaded.
|
||||
//
|
||||
RsPlugin *plugin ;
|
||||
|
Loading…
Reference in New Issue
Block a user