Critical Section added for TML reader writer thread sync
diff --git a/halimpl/pn54x/tml/phTmlNfc.c b/halimpl/pn54x/tml/phTmlNfc.c
index 8f994d6..7f108a1 100644
--- a/halimpl/pn54x/tml/phTmlNfc.c
+++ b/halimpl/pn54x/tml/phTmlNfc.c
@@ -426,10 +426,14 @@
           tMsg.Size = sizeof(tDeferredInfo);
           /*Don't wait for posting notifications. Only wait for posting
            * responses*/
+          /*TML reader writer callback syncronization-- START*/
+          pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
           if ((gpphTmlNfc_Context->gWriterCbflag == false) &&
               ((gpphTmlNfc_Context->tReadInfo.pBuffer[0] & 0x60) != 0x60)) {
             phTmlNfc_WaitWriteComplete();
           }
+          /*TML reader writer callback syncronization-- END*/
+          pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
           NXPLOG_TML_D("PN54X - Posting read message.....\n");
           phNxpNciHal_print_packet("RECV",
                                    gpphTmlNfc_Context->tReadInfo.pBuffer,
@@ -556,8 +560,12 @@
           NXPLOG_TML_D("PN54X - Posting Fresh Write message.....\n");
           phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
           if (NFCSTATUS_SUCCESS == wStatus) {
+            /*TML reader writer thread callback syncronization---START*/
+            pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
             gpphTmlNfc_Context->gWriterCbflag = true;
             phTmlNfc_SignalWriteComplete();
+            /*TML reader writer thread callback syncronization---END*/
+            pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
           }
         }
       } else {
@@ -1094,7 +1102,6 @@
   if (clock_gettime(CLOCK_MONOTONIC, &absTimeout) == -1) {
     NXPLOG_TML_E("Reader Thread clock_gettime failed");
   } else {
-    pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
     absTimeout.tv_sec += 1; /*1 second timeout*/
     gpphTmlNfc_Context->wait_busy_flag = true;
     NXPLOG_TML_D("phTmlNfc_WaitWriteComplete - enter");
@@ -1105,7 +1112,6 @@
       NXPLOG_TML_E("Reader Thread wait failed");
     }
     NXPLOG_TML_D("phTmlNfc_WaitWriteComplete - exit");
-    pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
   }
 }
 
@@ -1124,14 +1130,13 @@
   int ret = -1;
   if (gpphTmlNfc_Context->wait_busy_flag == true) {
     NXPLOG_TML_D("phTmlNfc_SignalWriteComplete - enter");
-    pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
     gpphTmlNfc_Context->wait_busy_flag = false;
+
     ret = pthread_cond_signal(&gpphTmlNfc_Context->wait_busy_condition);
     if (ret) {
       NXPLOG_TML_E(" phTmlNfc_SignalWriteComplete failed, error = 0x%X", ret);
     }
     NXPLOG_TML_D("phTmlNfc_SignalWriteComplete - exit");
-    pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
   }
 }