[Filesystem] Fix for thread that may outlive object it reffers to 06/182106/3
authorArkadiusz Pietraszek <a.pietraszek@partner.samsung.com>
Wed, 20 Jun 2018 08:58:57 +0000 (10:58 +0200)
committerArkadiusz Pietraszek <a.pietraszek@partner.samsung.com>
Thu, 5 Jul 2018 13:14:35 +0000 (13:14 +0000)
[Verification] tizen.filesystem methods work properly. Worker and insstance destructors work properly.

Change-Id: I5724bd798c868aaba23e9f4e5c5f4ba0b13d2faf
Signed-off-by: Arkadiusz Pietraszek <a.pietraszek@partner.samsung.com>
src/filesystem/filesystem_instance.cc
src/filesystem/filesystem_instance.h

index be8e802..52f5948 100644 (file)
@@ -145,6 +145,12 @@ FilesystemInstance::Worker::Worker()
 }
 
 FilesystemInstance::Worker::~Worker() {
+  if(!exit && thread.joinable()) {
+    stop();
+  }
+}
+
+void FilesystemInstance::Worker::stop() {
   {
     // use memory barrier for exit flag (could be std::atomic_flag, but we use lock instead)
     std::lock_guard<std::mutex> lck{jobs_mtx};
@@ -228,6 +234,7 @@ FilesystemInstance::FilesystemInstance() {
 
 FilesystemInstance::~FilesystemInstance() {
   ScopeLogger();
+  worker.stop();
   FilesystemManager::GetInstance().StopListening();
   FilesystemManager::GetInstance().RemoveListener();
 }
index 3721496..617fab3 100644 (file)
@@ -80,6 +80,7 @@ class FilesystemInstance : public common::ParsedInstance, FilesystemStateChangeL
     void main(void);
 
    public:
+    void stop();
     Worker();
     ~Worker();