Skip scoped resource cleanup in child process 09/323609/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 30 Apr 2025 12:29:55 +0000 (14:29 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 30 Apr 2025 15:35:20 +0000 (17:35 +0200)
Change-Id: I29e9ec760d9e73d4d0ebb593705c3c62c9e54fe9

src/ckm/ckm-common.cpp
src/ckm/ckm-common.h

index 1569089b1e67346ed68945ba611d2e36b5167053..b0adbc50353c8fd59ac7a4efecacc68af636f97a 100644 (file)
@@ -194,6 +194,13 @@ void save_data(const char* alias, const char *data, size_t len, int expected_err
     save_data(alias, data, len, nullptr, expected_err, exportable);
 }
 
+PidBound::PidBound() : m_pid(getpid()) {}
+
+bool PidBound::SamePid() const
+{
+    return getpid() == m_pid;
+}
+
 ScopedSaveData::ScopedSaveData(const char* alias, const char *data, int expected_err) : m_alias(alias)
 {
     save_data(alias, data, expected_err);
@@ -201,6 +208,9 @@ ScopedSaveData::ScopedSaveData(const char* alias, const char *data, int expected
 
 ScopedSaveData::~ScopedSaveData()
 {
+    if (!SamePid())
+        return;
+
     /*
      * Let it throw. If we can't remove data then remaining tests results will be
      * unreliable anyway.
@@ -215,6 +225,9 @@ ScopedDBUnlock::ScopedDBUnlock(uid_t user_id, const char* passwd) : m_uid(user_i
 }
 ScopedDBUnlock::~ScopedDBUnlock()
 {
+    if (!SamePid())
+        return;
+
     int temp;
     RUNNER_ASSERT_MSG(CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(m_uid)), CKMCErrorToString(temp));
 }
index d7efa38beca9254f10aa56b06eed2a9cf15b1daf..76b1b2b484320903a2918b0a1681858184cfc85f 100644 (file)
@@ -174,21 +174,33 @@ void save_data(const char* alias, const char *data, int expected_err = CKMC_ERRO
 void save_data(const char* alias, const char *data, size_t len,
                int expected_err = CKMC_ERROR_NONE, bool exportable = true);
 
-class ScopedSaveData
+class PidBound
+{
+public:
+    PidBound();
+
+protected:
+    bool SamePid() const;
+
+private:
+    pid_t m_pid;
+};
+
+class ScopedSaveData : public PidBound
 {
 public:
     ScopedSaveData(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
-    virtual ~ScopedSaveData();
+    ~ScopedSaveData();
 
 private:
     std::string m_alias;
 };
 
-class ScopedDBUnlock
+class ScopedDBUnlock : public PidBound
 {
 public:
     ScopedDBUnlock(uid_t user_id, const char* passwd);
-    virtual ~ScopedDBUnlock();
+    ~ScopedDBUnlock();
 
 private:
     uid_t m_uid;