return *prov;
}
-bool DBHandleProvider::IsCrashedWriteRequest() {
+std::vector<pid_t> DBHandleProvider::CrashedWriteRequestPIDs() {
std::unique_lock<std::shared_mutex> u(pid_list_lock_);
if (writer_pid_list_.empty())
- return false;
+ return {};
- bool ret = true;
LOG(DEBUG) << "Check process count : " << writer_pid_list_.size();
std::vector<pid_t> remove_pids;
for (pid_t pid : writer_pid_list_) {
LOG(ERROR) << "Process is crashed : " << pid;
remove_pids.push_back(pid);
} else {
- ret = false;
close(fd);
}
}
for (pid_t pid : remove_pids)
writer_pid_list_.erase(pid);
- return ret;
+ return remove_pids;
}
std::vector<std::pair<std::string, uid_t>> DBHandleProvider::GetParserDBPath() {
return writer_pid_list_.erase(pid) == 1;
}
-void DBHandleProvider::RegisterPendingPackageInfo(package_x* info) {
+void DBHandleProvider::RegisterPendingPackageInfo(package_x* info, pid_t pid) {
if (!info || !info->package)
return;
- pending_pkg_.emplace(info->package);
+ InsertPID(pid);
+
+ pending_pkg_[pid].emplace(info->package);
}
void DBHandleProvider::UpdatePendingPackageInfo(const tizen_base::Database& db,
- pid_t pid, uid_t uid, const std::string& locale) {
+ const std::vector<pid_t>& pids, uid_t uid, const std::string& locale) {
pkgmgrinfo_filter_x tmp_filter = { 0, };
pkgmgrinfo_node_x node = {
.prop = E_PMINFO_PKGINFO_PROP_PACKAGE_ID
tmp_filter.cache_flag = true;
tmp_filter.list = g_slist_append(tmp_filter.list, (gpointer)&node);
std::map<std::string, std::shared_ptr<package_x>> pkgs;
- for (const auto& pkg : pending_pkg_) {
- pkg_map_.erase(pkg);
- for (auto& appid : pkg_app_map_[pkg]) {
- app_map_.erase(appid);
+ for (const pid_t& pid : pids) {
+ for (const auto& pkg : pending_pkg_[pid]) {
+ pkg_map_.erase(pkg);
+ for (auto& appid : pkg_app_map_[pkg]) {
+ app_map_.erase(appid);
+ }
+
+ pkg_app_map_.erase(pkg);
+ node.value = const_cast<char*>(pkg.c_str());
+ internal::GetPkgInfo(db, &tmp_filter, uid_, locale, pkgs);
}
- pkg_app_map_.erase(pkg);
- node.value = const_cast<char*>(pkg.c_str());
- internal::GetPkgInfo(db, &tmp_filter, uid_, locale, pkgs);
+ pending_pkg_.erase(pid);
}
for (auto& [key, val] : pkgs)
}
g_slist_free(tmp_filter.list);
- pending_pkg_.clear();
}
bool DBHandleProvider::UpdateCachePkg(const tizen_base::Database& db, uid_t uid,