X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/fb2dd0f20bd6264291dccb5e97609a23cae2fd1a..0333697630a0235151e52d239630623b85cd2d9c:/lincan/include/can_queue.h diff --git a/lincan/include/can_queue.h b/lincan/include/can_queue.h index b8cbb09..709dda7 100644 --- a/lincan/include/can_queue.h +++ b/lincan/include/can_queue.h @@ -1,7 +1,7 @@ #ifndef _CAN_QUEUE_H #define _CAN_QUEUE_H -#include "./can.h" +#include "./canmsg.h" #include "./constants.h" #include "./can_sysdep.h" @@ -39,7 +39,7 @@ * @flist: pointer to list of the free slots associated with queue * @entry: pointer to the memory allocated for the list slots. * @fifo_lock: the lock to ensure atomicity of slot manipulation operations. - * @slotnr: number of allocated slots + * @slotsnr: number of allocated slots * * This structure represents CAN FIFO queue. It is implemented as * a single linked list of slots prepared for processing. The empty slots @@ -319,6 +319,8 @@ struct canque_edge_t { * with ready messages. The array is indexed by the edges priorities. * @idle: the list of the edges directed to the ends structure with empty FIFOs. * @inlist: the list of outgoing edges input sides. + * @outlist: the list of all incoming edges output sides. Each of there edges + * is listed on one of @active or @idle lists. * @ends_lock: the lock synchronizing operations between threads accessing * same ends structure. * @notify: pointer to notify procedure. The next state changes are notified. @@ -547,8 +549,9 @@ void canque_edge_decref(struct canque_edge_t *edge) can_spin_lock(&outends->ends_lock); if(atomic_dec_and_test(&edge->edge_used)) { dead_fl=canque_fifo_test_and_set_fl(&edge->fifo,DEAD); - /*This should not be there, but it cannot be outside of the lock :-(*/ - canque_notify_bothends(edge,CANQUEUE_NOTIFY_NOUSR); + /* Because of former evolution of edge references + management notify of CANQUEUE_NOTIFY_NOUSR could + be moved to canque_edge_do_dead :-) */ can_spin_unlock(&outends->ends_lock); can_spin_unlock_irqrestore(&inends->ends_lock, flags); canque_edge_do_dead(edge, dead_fl);