Package manager supports scenario in which multiple packages are installed at once.
The previous implementation contains defence code for the case where there are multiple apps in one package.
With this implementation, the multi package installation scenario malfunctioned.
So, the implementation was modified.
typedef struct _xmlDoc xmlDoc;
typedef xmlDoc* xmlDocPtr;
typedef struct _xmlDoc xmlDoc;
typedef xmlDoc* xmlDocPtr;
-static bool pluginInstalled = false;
+static std::string prevInstallPkgId = std::string("");
extern "C" int PKGMGR_PARSER_PLUGIN_INSTALL(xmlDocPtr doc, const char* pkgId)
{
extern "C" int PKGMGR_PARSER_PLUGIN_INSTALL(xmlDocPtr doc, const char* pkgId)
{
+ if (pkgId == NULL) {
+ return 0;
+ }
+
// Can be multiple apps in one package
// Can be multiple apps in one package
- if (pluginInstalled) {
- _INFO("Plugin already installed");
+ if (strcmp(pkgId, prevInstallPkgId.c_str()) == 0) {
+ _INFO("AppType Plugin already run for same pkgId (%s)", pkgId);
- pluginInstalled = true;
+ prevInstallPkgId = pkgId;
std::string appType = getAppType(pkgId);
if (appType.empty()) {
std::string appType = getAppType(pkgId);
if (appType.empty()) {
#endif
#define LOG_TAG "DOTNET_INSTALLER_PLUGIN"
#endif
#define LOG_TAG "DOTNET_INSTALLER_PLUGIN"
-static bool aotPluginInstalled = false;
-static bool aotPluginFinished = false;
+static std::string prevInstallPkgId = std::string("");
+static std::string prevFinishPkgId = std::string("");
typedef struct metadata_s {
const char* key;
typedef struct metadata_s {
const char* key;
extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
{
extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL) {
+ return 0;
+ }
+
// Can be multiple apps in one package
// Can be multiple apps in one package
- if (aotPluginInstalled) {
- _INFO("AOT plugin already installed");
+ if (strcmp(pkgId, prevInstallPkgId.c_str()) == 0) {
+ _INFO("AOT Plugin already run for same pkgId (%s)", pkgId);
- aotPluginInstalled = true;
+ prevInstallPkgId = pkgId;
int skipOpt = false;
if (!pkgmgr_installer_info_get_skip_optimization(&skipOpt)) {
int skipOpt = false;
if (!pkgmgr_installer_info_get_skip_optimization(&skipOpt)) {
extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
{
extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL) {
+ return 0;
+ }
+
// Can be multiple apps in one package
// Can be multiple apps in one package
- if (aotPluginFinished) {
- _INFO("AOT plugin already finished(CLEAN)");
+ if (strcmp(pkgId, prevFinishPkgId.c_str()) == 0) {
+ _INFO("AOT Plugin(CLEAN) already run for same pkgId (%s)", pkgId);
- aotPluginFinished = true;
+ prevFinishPkgId = pkgId;
finalizeNICommon();
return 0;
finalizeNICommon();
return 0;
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
{
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL) {
+ return 0;
+ }
+
// Can be multiple apps in one package
// Can be multiple apps in one package
- if (aotPluginFinished) {
- _INFO("AOT plugin already finished(UNDO)");
+ if (strcmp(pkgId, prevFinishPkgId.c_str()) == 0) {
+ _INFO("AOT Plugin(UNDO) already run for same pkgId (%s)", pkgId);
- aotPluginFinished = true;
+ prevFinishPkgId = pkgId;
finalizeNICommon();
return 0;
finalizeNICommon();
return 0;
extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
{
extern "C" int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacInstall(std::string(pkgId), TAC_STATE_INSTALL);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgId, const char *appId, GList *list)
{
return tacInstall(std::string(pkgId), TAC_STATE_INSTALL);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacUpgrade(std::string(pkgId), TAC_STATE_UPGRADE);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgId, const char *appId, GList *list)
{
return tacUpgrade(std::string(pkgId), TAC_STATE_UPGRADE);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacUninstall(std::string(pkgId), TAC_STATE_UNINSTALL);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_REMOVED(const char *pkgId, const char *appId, GList *list)
{
return tacUninstall(std::string(pkgId), TAC_STATE_UNINSTALL);
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_REMOVED(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacRemoved(std::string(pkgId));
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
{
return tacRemoved(std::string(pkgId));
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_UNDO(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacUndo(std::string(pkgId));
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
{
return tacUndo(std::string(pkgId));
}
extern "C" int PKGMGR_MDPARSER_PLUGIN_CLEAN(const char *pkgId, const char *appId, GList *list)
{
+ if (pkgId == NULL || appId == NULL) {
+ return 0;
+ }
return tacClean(std::string(pkgId));
}
return tacClean(std::string(pkgId));
}
static std::vector<std::string> updateTac;
static std::vector<std::string> updateTlc;
static tac_state tacState = TAC_STATE_NONE;
static std::vector<std::string> updateTac;
static std::vector<std::string> updateTlc;
static tac_state tacState = TAC_STATE_NONE;
-static bool tacPluginInstalled = false;
-static bool tacPluginFinished = false;
+static std::string prevInstallPkgId = std::string("");
+static std::string prevFinishPkgId = std::string("");
static void createSHA256Info(std::string sha256Info, std::string nugetPackage)
{
static void createSHA256Info(std::string sha256Info, std::string nugetPackage)
{
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
- if (tacPluginInstalled) {
- _INFO("TAC plugin already installed");
+ if (strcmp(pkgId.c_str(), prevInstallPkgId.c_str()) == 0) {
+ _INFO("TAC Plugin(INSTALL) already run for same pkgId (%s)", pkgId.c_str());
- tacPluginInstalled = true;
+ prevInstallPkgId = pkgId;
std::string appType = getAppType(pkgId);
if (strstr(appType.c_str(), "dotnet") == NULL) {
std::string appType = getAppType(pkgId);
if (strstr(appType.c_str(), "dotnet") == NULL) {
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
- if (tacPluginInstalled) {
- _INFO("TAC plugin already upgraded");
+ if (strcmp(pkgId.c_str(), prevInstallPkgId.c_str()) == 0) {
+ _INFO("TAC Plugin(UPGRADE) already run for same pkgId (%s)", pkgId.c_str());
- tacPluginInstalled = true;
+ prevInstallPkgId = pkgId;
std::string appType = getAppType(pkgId);
if (strstr(appType.c_str(), "dotnet") == NULL) {
std::string appType = getAppType(pkgId);
if (strstr(appType.c_str(), "dotnet") == NULL) {
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
- if (tacPluginInstalled) {
- _INFO("TAC plugin already uninstalled");
+ if (strcmp(pkgId.c_str(), prevInstallPkgId.c_str()) == 0) {
+ _INFO("TAC Plugin(UNINSTALL) already run for same pkgId (%s)", pkgId.c_str());
- tacPluginInstalled = true;
+ prevInstallPkgId = pkgId;
tacState= state;
if (tac_openDB() != 0) {
tacState= state;
if (tac_openDB() != 0) {
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
- if (tacPluginFinished) {
- _INFO("TAC plugin already finished(UNDO)");
+ if (strcmp(pkgId.c_str(), prevFinishPkgId.c_str()) == 0) {
+ _INFO("TAC Plugin(UNDO) already run for same pkgId (%s)", pkgId.c_str());
- tacPluginFinished = true;
+ prevFinishPkgId = pkgId;
if (tacState == TAC_STATE_INSTALL) {
install_Undo();
if (tacState == TAC_STATE_INSTALL) {
install_Undo();
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
_INFO("PackageID : %s", pkgId.c_str());
// Can be multiple apps in one package
- if (tacPluginFinished) {
- _INFO("TAC plugin already finished(CLEAN)");
+ if (strcmp(pkgId.c_str(), prevFinishPkgId.c_str()) == 0) {
+ _INFO("TAC Plugin(CLEAN) already run for same pkgId (%s)", pkgId.c_str());
- tacPluginFinished = true;
+ prevFinishPkgId = pkgId;
if (tacState == TAC_STATE_INSTALL) {
install_Clean();
if (tacState == TAC_STATE_INSTALL) {
install_Clean();