wake_up(&qends->endinfo.chipinfo.daemonq);
break;*/
case CANQUEUE_NOTIFY_PROC:
+ #ifndef CAN_WITH_RTL
/*wake_up(&qends->endinfo.chipinfo.daemonq);*/
chip->chipspecops->wakeup_tx(chip, obj);
+ #else /*CAN_WITH_RTL*/
+ can_msgobj_set_fl(obj,TX_REQUEST);
+ if(qends->endinfo.chipinfo.worker_thread){
+ can_msgobj_set_fl(obj,WORKER_WAKE);
+ pthread_kill(qends->endinfo.chipinfo.worker_thread,RTL_SIGNAL_WAKEUP);
+ rtl_schedule();
+ } else {
+ set_bit(MSGOBJ_TX_REQUEST_b,&chip->pend_flags);
+
+ if(chip->worker_thread) {
+ set_bit(MSGOBJ_WORKER_WAKE_b,&chip->pend_flags);
+ pthread_kill(chip->worker_thread,RTL_SIGNAL_WAKEUP);
+ rtl_schedule();
+ }
+ }
+ #endif /*CAN_WITH_RTL*/
break;
case CANQUEUE_NOTIFY_DEAD_WANTED:
case CANQUEUE_NOTIFY_DEAD:
if(ret<0) return ret;
qends->context=NULL;
+ #ifndef CAN_WITH_RTL
init_waitqueue_head(&qends->endinfo.chipinfo.daemonq);
+ #endif /*CAN_WITH_RTL*/
qends->endinfo.chipinfo.chip=chip;
qends->endinfo.chipinfo.msgobj=obj;
qends->notify=canqueue_notify_chip;
int canqueue_ends_done_chip(struct canque_ends_t *qends)
{
- return 0;
+ int delayed;
+
+ /* Finish or kill all outgoing edges listed in inends */
+ delayed=canqueue_ends_kill_inlist(qends, 1);
+ /* Kill all incoming edges listed in outends */
+ delayed|=canqueue_ends_kill_outlist(qends);
+
+ return delayed;
}