Fix synchronization problem during application closing
authorPiotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
Thu, 10 Oct 2013 12:11:45 +0000 (14:11 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Thu, 6 Feb 2014 16:13:22 +0000 (17:13 +0100)
[Issue#]        N/A
[Bug]           Application may not close imediately in rare cases.
[Cause]         Synchronization issue.
[Solution]      Fixed synchronization issue.
[Verification]  Build secutiry server, run tests.

Change-Id: I70bf075c38c312731ec5fb360644068e056ae000

src/server2/main/service-thread.h

index 52db7a5..e5989e6 100644 (file)
@@ -79,8 +79,11 @@ public:
 
     void Join() {
         assert(m_state != State::NoThread);
-        m_quit = true;
-        m_waitCondition.notify_one();
+        {
+            std::lock_guard<std::mutex> lock(m_eventQueueMutex);
+            m_quit = true;
+            m_waitCondition.notify_one();
+        }
         m_thread.join();
         m_state = State::NoThread;
     }
@@ -135,10 +138,12 @@ protected:
     }
 
     void ThreadLoop(){
-        while(m_quit == false) {
+        for (;;) {
             EventDescription description = {NULL, NULL, NULL, NULL};
             {
                 std::unique_lock<std::mutex> ulock(m_eventQueueMutex);
+                if (m_quit)
+                    return;
                 if (!m_eventQueue.empty()) {
                     description = m_eventQueue.front();
                     m_eventQueue.pop();