--- 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);