X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fserver%2Fworker_thread.cc;h=b623a2c112c5d7dd3b9f022303cd37ee4fd46b4c;hb=54073ac20bd49b3d664527b7f13b04290152e268;hp=ab9b637710d68b8a678a89b774b963ba8d281aaa;hpb=c9b449357e8f03554a2f5d09619bba90e0320ae5;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git diff --git a/src/server/worker_thread.cc b/src/server/worker_thread.cc index ab9b637..b623a2c 100644 --- a/src/server/worker_thread.cc +++ b/src/server/worker_thread.cc @@ -24,8 +24,10 @@ #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" @@ -126,6 +128,8 @@ void WorkerThread::Run() { } pkgmgr_common::ReqType type = req->GetRequestType(); + if (pkgmgr_common::IsDbWriteRequest(type)) + StopDbChangeListening(); std::vector privileges = GetPrivileges(type); if (!CynaraChecker::GetInst().CheckPrivilege(this, req, privileges)) continue; @@ -181,6 +185,14 @@ gboolean WorkerThread::TrimMemory(void* data) { 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; @@ -200,4 +212,14 @@ void WorkerThread::SendError(const std::shared_ptr& req) { 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