#include "abstract_parcelable.hh"
#include "cynara_checker.hh"
+#include "db_change_observer.hh"
#include "request_handler_factory.hh"
#include "server/database/db_handle_provider.hh"
+#include "server/database/update_pending_cache_handler.hh"
#include "utils/logging.hh"
#include "pkgmgrinfo_debug.h"
}
pkgmgr_common::ReqType type = req->GetRequestType();
+ if (pkgmgr_common::IsDbWriteRequest(type))
+ StopDbChangeListening();
std::vector<std::string> privileges = GetPrivileges(type);
if (!CynaraChecker::GetInst().CheckPrivilege(this, req, privileges))
continue;
h->timer_ = 0;
}
+ auto crashed_writer_pids =
+ database::DBHandleProvider::CrashedWriteRequestPIDs();
+ if (!crashed_writer_pids.empty()) {
+ database::UpdatePendingCacheHandler db(getuid(), std::move(crashed_writer_pids), {});
+ db.SetLocale(h->locale_.GetObject());
+ db.Execute();
+ }
+
sqlite3_release_memory(-1);
malloc_trim(0);
return G_SOURCE_REMOVE;
req->SendData(p);
}
+void WorkerThread::StopDbChangeListening() {
+ auto& db_observer = pkgmgr_common::DbChangeObserver::GetInst();
+
+ if (db_observer.GetDisposed())
+ return;
+
+ LOG(WARNING) << "Try stop listening db change";
+ db_observer.StopListening();
+}
+
} // namespace pkgmgr_server