NFC service died when SPI + DWP-reset/NFC ON/OFF Lock added to serialize HalIoctl as a work around for Google's HIDL crash issue
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 99d659d..4433981 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -74,6 +74,7 @@
 
 NfcAdaptation* NfcAdaptation::mpInstance = NULL;
 ThreadMutex NfcAdaptation::sLock;
+ThreadMutex NfcAdaptation::sIoctlLock;
 sp<INxpNfc> NfcAdaptation::mHalNxpNfc;
 sp<INfc> NfcAdaptation::mHal;
 INfcClientCallback* NfcAdaptation::mCallback;
@@ -581,13 +582,15 @@
   const char* func = "NfcAdaptation::HalIoctl";
   mHalIoctlEvent.lock();
   ::android::hardware::nfc::V1_0::NfcData data;
+  AutoThreadMutex a(sIoctlLock);
   nfc_nci_IoctlInOutData_t* pInpOutData = (nfc_nci_IoctlInOutData_t*)p_data;
   int status = 0;
   ALOGD("%s arg=%ld", func, arg);
   pInpOutData->inp.context = &NfcAdaptation::GetInstance();
   NfcAdaptation::GetInstance().mCurrentIoctlData = pInpOutData;
   data.setToExternal((uint8_t*)pInpOutData, sizeof(nfc_nci_IoctlInOutData_t));
-  mHalNxpNfc->ioctl(arg, data, IoctlCallback);
+  if(mHalNxpNfc != nullptr)
+      mHalNxpNfc->ioctl(arg, data, IoctlCallback);
   ALOGD("%s Ioctl Completed for Type=%llu", func, pInpOutData->out.ioctlType);
   mHalIoctlEvent.unlock();
   return (pInpOutData->out.result);
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index e3ce61a..1bbf2b9 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -115,6 +115,7 @@
   void signal();
   static NfcAdaptation* mpInstance;
   static ThreadMutex sLock;
+  static ThreadMutex sIoctlLock;
   ThreadCondVar mCondVar;
   tHAL_NFC_ENTRY mHalEntryFuncs;  // function pointers for HAL entry points
   static nfc_nci_device_t* mHalDeviceContext;