diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index c4431b6..920902e 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -165,11 +165,11 @@
                              int event, int enabled)
 {
     int ret = 0;
-    static int prev_value;
 
     hwc_context_t* ctx = (hwc_context_t*)(dev);
     private_module_t* m = reinterpret_cast<private_module_t*>(
                 ctx->mFbDev->common.module);
+    pthread_mutex_lock(&ctx->vstate.lock);
     switch(event) {
         case HWC_EVENT_VSYNC:
             if (ctx->vstate.enable == enabled)
@@ -178,30 +178,18 @@
                      &enabled) < 0) {
                 ALOGE("%s: vsync control failed. Dpy=%d, enabled=%d : %s",
                       __FUNCTION__, dpy, enabled, strerror(errno));
-
                 ret = -errno;
             }
-            /* vsync state change logic */
-            if (enabled == 1) {
-                //unblock vsync thread
-                pthread_mutex_lock(&ctx->vstate.lock);
-                ctx->vstate.enable = true;
+            ctx->vstate.enable = !!enabled;
+            if (enabled)
                 pthread_cond_signal(&ctx->vstate.cond);
-                pthread_mutex_unlock(&ctx->vstate.lock);
-            } else if (enabled == 0 && ctx->vstate.enable) {
-                //vsync thread will block
-                pthread_mutex_lock(&ctx->vstate.lock);
-                ctx->vstate.enable = false;
-                pthread_mutex_unlock(&ctx->vstate.lock);
-            }
-            ALOGD_IF (VSYNC_DEBUG, "VSYNC state changed from %s to %s",
-              (prev_value)?"ENABLED":"DISABLED", (enabled)?"ENABLED":"DISABLED");
-            prev_value = enabled;
-            /* vsync state change logic - end*/
-           break;
+            ALOGD_IF (VSYNC_DEBUG, "VSYNC state changed to %s",
+                      (enabled)?"ENABLED":"DISABLED");
+            break;
         default:
             ret = -EINVAL;
     }
+    pthread_mutex_unlock(&ctx->vstate.lock);
     return ret;
 }
 
diff --git a/libhwcomposer/hwc_vsync.cpp b/libhwcomposer/hwc_vsync.cpp
index cea00f4..5408c8b 100644
--- a/libhwcomposer/hwc_vsync.cpp
+++ b/libhwcomposer/hwc_vsync.cpp
@@ -48,7 +48,8 @@
     static char vdata[PAGE_SIZE];
 
     uint64_t cur_timestamp=0;
-    int32_t len = -1, fd_timestamp = -1;
+    ssize_t len = -1;
+    int fd_timestamp = -1;
     bool fb1_vsync = false;
 
     /* Currently read vsync timestamp from drivers
@@ -57,49 +58,43 @@
 
     do {
         pthread_mutex_lock(&ctx->vstate.lock);
-        if(ctx->vstate.enable == false) {
-          pthread_cond_wait(&ctx->vstate.cond, &ctx->vstate.lock);
-        }
+        while (ctx->vstate.enable == false)
+            pthread_cond_wait(&ctx->vstate.cond, &ctx->vstate.lock);
         pthread_mutex_unlock(&ctx->vstate.lock);
 
-
-       // try to open timestamp sysfs
         fd_timestamp = open(vsync_timestamp_fb0, O_RDONLY);
-       if (fd_timestamp < 0) {
-           ALOGE ("FATAL:%s:not able to open file:%s, %s",  __FUNCTION__,
-                 (fb1_vsync) ? vsync_timestamp_fb1 : vsync_timestamp_fb0,
-                                                         strerror(errno));
-           return NULL;
+        if (fd_timestamp < 0) {
+            ALOGE ("FATAL:%s:not able to open file:%s, %s",  __FUNCTION__,
+                   (fb1_vsync) ? vsync_timestamp_fb1 : vsync_timestamp_fb0,
+                                                     strerror(errno));
+            return NULL;
        }
        // Open success - read now
        len = read(fd_timestamp, vdata, PAGE_SIZE);
        if (len < 0){
            ALOGE ("FATAL:%s:not able to read file:%s, %s", __FUNCTION__,
                   vsync_timestamp_fb0, strerror(errno));
-           fd_timestamp = -1;
+           close (fd_timestamp);
            return NULL;
        }
 
-      // extract timestamp
-      const char *str = vdata;
-      if (!strncmp(str, "VSYNC=", strlen("VSYNC="))) {
+       // extract timestamp
+       const char *str = vdata;
+       if (!strncmp(str, "VSYNC=", strlen("VSYNC="))) {
           cur_timestamp = strtoull(str + strlen("VSYNC="), NULL, 0);
-      } else {
-        ALOGE ("FATAL:%s:timestamp data not in correct format",
+       } else {
+          ALOGE ("FATAL:%s:timestamp data not in correct format",
                                                  __FUNCTION__);
-      }
-      // send timestamp to HAL
-      ALOGD_IF (VSYNC_DEBUG, "%s: timestamp %llu sent to HWC for %s",
+       }
+       // send timestamp to HAL
+       ALOGD_IF (VSYNC_DEBUG, "%s: timestamp %llu sent to HWC for %s",
             __FUNCTION__, cur_timestamp, "fb0");
-      ctx->proc->vsync(ctx->proc, display, cur_timestamp);
+       ctx->proc->vsync(ctx->proc, display, cur_timestamp);
 
-      // close open fds
-      close (fd_timestamp);
-
-      // reset fd
-      fd_timestamp = -1;
-
+       close (fd_timestamp);
     } while (true);
+
+    return NULL;
 }
 
 void init_vsync_thread(hwc_context_t* ctx)
