INSTALL(FILES inc/tac_common.h DESTINATION ${INCLUDEDIR})
INSTALL(FILES ../dotnet-launcher.pc DESTINATION ${LIBDIR}/pkgconfig)
INSTALL(FILES dotnet-launcher.info DESTINATION /usr/share/parser-plugins)
-
#include <cstring>
#include <vector>
-#include <sstream>
#include <glib.h>
#include <pkgmgr_installer_info.h>
#define LOG_TAG "DOTNET_INSTALLER_PLUGIN"
bool aotPluginInstalled = false;
+bool aotPluginFinished = false;
extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
{
std::string metaValue = getMetadataValue(std::string(pkgId), AOT_METADATA_KEY);
if (metaValue.empty()) {
_ERR("Failed to get metadata from [%s]", pkgId);
- return 0;
+ return -1;
}
if (metaValue == METADATA_VALUE) {
extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
{
- // it can be call without initializeNICommon()
+ // Can be multiple apps in one package
+ if (aotPluginFinished) {
+ _INFO("AOT plugin already finished(CLEAN)");
+ return 0;
+ }
+ aotPluginFinished = true;
+
finalizeNICommon();
return 0;
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
{
+ // Can be multiple apps in one package
+ if (aotPluginFinished) {
+ _INFO("AOT plugin already finished(UNDO)");
+ return 0;
+ }
+ aotPluginFinished = true;
+
finalizeNICommon();
return 0;
}
}
if (checkNIExistence(dllPath)) {
- fprintf(stderr, "Already ni file is exist for %s\n", dllPath.c_str());
+ //fprintf(stderr, "Already ni file is exist for %s\n", dllPath.c_str());
return NI_ERROR_ALREADY_EXIST;
}
}
auto convert = [&rootPaths, flags](const std::string& path, const std::string& filename) {
-
// if path is symlink, donot generate crossgen
if (!crossgen(path, rootPaths.c_str(), flags)) {
waitInterval();
bf::create_symlink(originNIPath, symNIPath);
copySmackAndOwnership(symPath.c_str(), symNIPath.c_str(), true);
fprintf(stdout, "%s symbolic link file generated successfully.\n", symNIPath.c_str());
+ _INFO("%s symbolic link file generated successfully.", symNIPath.c_str());
}
}
} catch (const bf::filesystem_error& error) {
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <vconf.h>
#include <iterator>
#include <sstream>
-#include <vconf.h>
#include <fstream>
#include "utils.h"
return appNIPaths;
}
-// return native dll searching paths for app
+// return native dll searching paths for app
const std::string& PathManager::getNativeDllSearchingPaths()
{
return nativeDllSearchingPaths;
}
-
__pluginFunc = (PluginFunc*)calloc(sizeof(PluginFunc), 1);
if (!__pluginFunc) {
_ERR("fail to allocate memory for plugin function structure");
+ dlclose(__pluginLib);
+ __pluginLib = NULL;
return -1;
}
__pluginFunc->initialize = (plugin_initialize_ptr)dlsym(__pluginLib, "plugin_initialize");
void finalizePluginManager()
{
+ if (!initializedPluginManager)
+ return;
+
_INFO("Plugin manager finalize called");
+
if (__pluginFunc) {
free(__pluginFunc);
__pluginFunc = NULL;