drivers/win32/drivers_win32.cpp
changeset 149 fe50ada8020b
parent 145 e747d2e26af0
child 150 d2fc5d5f8a36
--- a/drivers/win32/drivers_win32.cpp	Thu Apr 05 10:06:11 2007 +0200
+++ b/drivers/win32/drivers_win32.cpp	Fri Apr 06 16:49:28 2007 +0200
@@ -197,8 +197,12 @@
    {
    if (fd0 != NULL && s_driver_procs.m_canSend != NULL)
       {
+      UNS8 res;
       driver_data* data = (driver_data*)fd0;
-      if ((*s_driver_procs.m_canSend)(data->inst, m))
+      LeaveMutex();
+      res = (*s_driver_procs.m_canSend)(data->inst, m);      
+      EnterMutex();
+      if (res)
          return 0;
       }
    return 1;
@@ -217,6 +221,9 @@
          data->inst = inst;
          data->continue_receive_thread = true;
          CreateReceiveTask(data, &data->receive_thread, &canReceiveLoop);
+	 EnterMutex();
+         d->canHandle = data;
+         LeaveMutex();
          return data;
          }
       }
@@ -224,11 +231,14 @@
    }
 
 /***************************************************************************/
-int canClose(CAN_PORT fd0)
+int canClose(CO_Data * d)
    {
    if (fd0 != NULL && s_driver_procs.m_canClose != NULL)
       {
-      driver_data* data = (driver_data*)fd0;
+      EnterMutex();
+      driver_data* data = (driver_data*)d->canHandle;
+      d->canHandle = NULL;
+      LeaveMutex();
       data->continue_receive_thread = false;
       WaitReceiveTaskEnd(&data->receive_thread);
       (*s_driver_procs.m_canClose)(data->inst);