]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/finish.c
Added support for fasync system call and replacement of spinXXX by can_spinXXX
[lincan.git] / lincan / src / finish.c
index a5cd8d176413cf85b38595d07211a7a66cdc06e1..fdca959e807692ceddeaba8a2996e4d67d8b9076 100644 (file)
@@ -9,8 +9,10 @@
 
 void msgobj_done(struct msgobj_t *obj)
 {
 
 void msgobj_done(struct msgobj_t *obj)
 {
+       int delayed=0;
        if(obj->qends) {
        if(obj->qends) {
-               if(canqueue_ends_done_chip(obj->qends) < 0)
+               delayed=canqueue_ends_done_chip(obj->qends);
+               if(delayed < 0)
                        CANMSG("msgobj_done: problem with chip queue ends\n");
        }
 
                        CANMSG("msgobj_done: problem with chip queue ends\n");
        }
 
@@ -32,7 +34,11 @@ void msgobj_done(struct msgobj_t *obj)
        del_timer_sync(&obj->tx_timeout);
 
        if(obj->qends) {
        del_timer_sync(&obj->tx_timeout);
 
        if(obj->qends) {
-               can_checked_free(obj->qends);
+               /*delayed free could be required there in the future,
+                 actual use patter cannot generate such situation*/
+               if(!delayed) {
+                       can_checked_free(obj->qends);
+               }
        }
        obj->qends=NULL;
 }
        }
        obj->qends=NULL;
 }