drm_hwcomposer: avoid potential race condition between worker init and exit

Protect worker initialization and exit with lock in case Exit is called
in different thread.

Change-Id: Ibddfce192deeea9d33575de8abf859fdca5f74ed
Signed-off-by: Adrian Salido <salidoa@google.com>
diff --git a/worker.cpp b/worker.cpp
index 47aeb86..da6c580 100644
--- a/worker.cpp
+++ b/worker.cpp
@@ -30,21 +30,23 @@
 }
 
 int Worker::InitWorker() {
+  std::lock_guard<std::mutex> lk(mutex_);
   if (initialized())
     return -EALREADY;
 
   thread_ = std::unique_ptr<std::thread>(
       new std::thread(&Worker::InternalRoutine, this));
   initialized_ = true;
+  exit_ = false;
 
   return 0;
 }
 
 void Worker::Exit() {
+  std::unique_lock<std::mutex> lk(mutex_);
+  exit_ = true;
   if (initialized()) {
-    Lock();
-    exit_ = true;
-    Unlock();
+    lk.unlock();
     cond_.notify_all();
     thread_->join();
     initialized_ = false;
@@ -68,7 +70,7 @@
   if (should_exit())
     ret = -EINTR;
 
-  // release leaves lock unlocked when returning
+  // release leaves mutex locked when going out of scope
   lk.release();
 
   return ret;