Modify AMD database API
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 3 Aug 2023 05:32:44 +0000 (14:32 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 8 Aug 2023 23:03:30 +0000 (08:03 +0900)
To reduce memory usage, amd opens and closes the database repeatedly
in the loop.

Change-Id: I6db87bbbe38ad7b2b08e237d005bda4b8a4a3ed5
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/lib/api/amd_api_database.cc
src/lib/common/database.cc

index c7b382f456d8579e97f7e746417064abee2e0b20..85ceabf856b0af15bc363d946c8a2dc6b0405ee1 100644 (file)
@@ -173,7 +173,9 @@ class DBManager {
       amd_database_query_cb cb, void* user_data, bool sync) {
     if (sync) {
       try {
-        auto cursor = std::make_unique<Cursor>(db_->GetHandle(),
+        amd::Database db(PATH_AMD_DB);
+        db.Open(SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
+        auto cursor = std::make_unique<Cursor>(db.GetHandle(),
             std::move(query), std::move(bind_text));
         return cb(cursor.get(), user_data);
       } catch (const amd::Exception& e) {
@@ -198,14 +200,7 @@ class DBManager {
     if (!disposed_)
       return;
 
-    try {
-      db_.reset(new amd::Database(PATH_AMD_DB));
-      db_->Open(SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
-    } catch (const amd::Exception& e) {
-      _E("Open() is failed. error(%d)", e.GetErrorCode());
-      return;
-    }
-
+    db_.reset(new amd::Database(PATH_AMD_DB));
     thread_ = std::thread([&]{
           SetComm("DBWriter+");
           do {
@@ -213,6 +208,13 @@ class DBManager {
             if (job.IsDone())
               break;
 
+            try {
+              db_->Open(SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
+            } catch (const amd::Exception& e) {
+              _E("Open() is failed. error(%d)", e.GetErrorCode());
+              continue;
+            }
+
             db_->BeginTransaction();
 
             auto cursor = std::make_unique<Cursor>(db_->GetHandle(),
@@ -222,6 +224,7 @@ class DBManager {
               db_->Rollback();
 
             db_->EndTransaction();
+            db_->Close();
           } while (true);
         });
 
index 7c7adfd9dddedb4217eb17c99f1f7f1236fa6128..6cf40e6b23d7a9f0389931399c01902e9aaa3fea 100644 (file)
@@ -81,7 +81,7 @@ void Database::Open(int flags) {
 
 void Database::Close() {
   if (db_) {
-    sqlite3_close(db_);
+    sqlite3_close_v2(db_);
     db_ = nullptr;
   }
 }