drivers/unix/unix.c
changeset 149 fe50ada8020b
parent 145 e747d2e26af0
child 151 ebf4bd44f282
--- a/drivers/unix/unix.c	Thu Apr 05 10:06:11 2007 +0200
+++ b/drivers/unix/unix.c	Fri Apr 06 16:49:28 2007 +0200
@@ -146,7 +146,14 @@
 
 UNS8 canSend(CAN_PORT port, Message *m)
 {
-	return DLL_CALL(canSend)(((CANPort*)port)->fd, m);
+	if(port){
+		UNS8 res;
+	        LeaveMutex();
+		res = DLL_CALL(canSend)(((CANPort*)port)->fd, m);
+		EnterMutex();
+		return res;
+	}               
+	return -1;
 }
 
 void canReceiveLoop(CAN_PORT port)
@@ -184,17 +191,23 @@
 	canports[i].d = d;
 
 	CreateReceiveTask(&(canports[i]), &canports[i].receiveTask, &canReceiveLoop);
-		
+	
+	EnterMutex();
+	d->canHandle = (CAN_PORT)&canports[i];
+	LeaveMutex();
 	return (CAN_PORT)&canports[i];
 }
 
-int canClose(CAN_PORT port)
-{
-	((CANPort*)port)->used = 0;
-	int res = DLL_CALL(canClose)(((CANPort*)port)->fd);
-	
-	WaitReceiveTaskEnd(((CANPort*)port)->receiveTask);
+int canClose(CO_Data * d)
+{
+	EnterMutex();
+	((CANPort*)d->canHandle)->used = 0;
+	CANPort* tmp = (CANPort*)d->canHandle;
+	d->canHandle = NULL;
+	LeaveMutex();
+	
+	int res = DLL_CALL(canClose)(tmp->fd);
+	
+	WaitReceiveTaskEnd(tmp->receiveTask);
 	return res;
 }
-
-