From baec018e93c0e7cea7993c22a5e32f2065a1e7ae Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 2 Nov 2017 14:15:04 +0000 Subject: [PATCH setup] Empty packagedb and underlying solver pool if we go back to WM_APP_START_SETUP_INI_DOWNLOAD XXX: this is probably still wrong as we can bypass this state? --- ini.cc | 3 +++ libsolv.cc | 15 +++++++++++++++ libsolv.h | 2 ++ package_db.cc | 13 +++++++++++++ package_db.h | 1 + 5 files changed, 34 insertions(+) diff --git a/ini.cc b/ini.cc index 0f8b927..e2ab08f 100644 --- a/ini.cc +++ b/ini.cc @@ -346,6 +346,9 @@ do_remote_ini (HWND owner) static bool do_ini_thread (HINSTANCE h, HWND owner) { + packagedb db; + db.init(); + size_t ini_count = 0; if (source == IDC_SOURCE_LOCALDIR) ini_count = do_local_ini (owner); diff --git a/libsolv.cc b/libsolv.cc index 9dd1eeb..7eecc29 100644 --- a/libsolv.cc +++ b/libsolv.cc @@ -316,6 +316,12 @@ void debug_callback(Pool *pool, void *data, int type, const char *str) } SolverPool::SolverPool() +{ + init(); +} + +void +SolverPool::init() { /* create a pool */ pool = pool_create(); @@ -333,6 +339,15 @@ SolverPool::SolverPool() pool_set_installed(pool, installed->repo); } +void +SolverPool::clear() +{ + repos.clear(); + pool_free(pool); + + init(); +} + SolvRepo * SolverPool::getRepo(const std::string &name, bool test) { diff --git a/libsolv.h b/libsolv.h index 65e1610..366cd59 100644 --- a/libsolv.h +++ b/libsolv.h @@ -130,6 +130,7 @@ class SolverPool { public: SolverPool(); + void clear(); SolvRepo *getRepo(const std::string &name, bool test = false); // Utility class for passing arguments to addPackage() @@ -158,6 +159,7 @@ public: private: + void init(); Id makedeps(Repo *repo, PackageDepends *requires); Pool *pool; diff --git a/package_db.cc b/package_db.cc index 66e7f0a..5bf9009 100644 --- a/package_db.cc +++ b/package_db.cc @@ -47,6 +47,19 @@ packagedb::packagedb () { } +void +packagedb::init () +{ + installeddbread = 0; + installeddbver = 0; + packages.clear(); + sourcePackages.clear(); + categories.clear(); + solver.clear(); + basepkg = packageversion(); + dependencyOrderedPackages.clear(); +} + void packagedb::read () { diff --git a/package_db.h b/package_db.h index d7127a6..a26c387 100644 --- a/package_db.h +++ b/package_db.h @@ -64,6 +64,7 @@ class packagedb { public: packagedb (); + void init(); void read(); void makeBase(); /* 0 on success */ -- 2.15.0