Gilles Chanteperdrix wrote: > Jan Kiszka wrote: >> Gilles Chanteperdrix wrote: >>> Jan Kiszka wrote: >>>> Hi Gilles, >>>> >>>> I tend to think that xnselect_destroy should signal an event on the >>>> dying fd instead of just clearing the binding. The task blocking on >>>> select currently does not get a hint that the fd is dead and will block >>>> on select until some other event arrives. That's unfortunately not >>>> standard conforming. >>> Could you test the following patch? The fd will be in the "pending" set >>> until the fd is reused, but that should be harmless as long as the fd is >>> not in the "expected" set. >>> >>> diff --git a/ksrc/nucleus/select.c b/ksrc/nucleus/select.c >>> index fd56bfb..17c5e0b 100644 >>> --- a/ksrc/nucleus/select.c >>> +++ b/ksrc/nucleus/select.c >>> @@ -131,7 +131,8 @@ int xnselect_bind(struct xnselect *select_block, >>> __FD_SET(index, &selector->fds[type].pending); >>> if (xnselect_wakeup(selector)) >>> xnpod_schedule(); >>> - } >>> + } else >>> + __FD_CLR(index, &selector->fds[type].pending); >>> >>> return 0; >>> } >>> @@ -178,6 +179,7 @@ EXPORT_SYMBOL_GPL(__xnselect_signal); >>> void xnselect_destroy(struct xnselect *select_block) >>> { >>> xnholder_t *holder; >>> + int resched; >>> spl_t s; >>> >>> xnlock_get_irqsave(&nklock, s); >>> @@ -190,11 +192,18 @@ void xnselect_destroy(struct xnselect *select_block) >>> >>> __FD_CLR(binding->bit_index, >>> &selector->fds[binding->type].expected); >>> - __FD_CLR(binding->bit_index, >>> - &selector->fds[binding->type].pending); >>> + if (!__FD_ISSET(binding->bit_index, >>> + &selector->fds[binding->type].pending)) { >>> + __FD_SET(binding->bit_index, >>> + &selector->fds[binding->type].pending); >>> + if (xnselect_wakeup(selector)) >>> + resched = 1; >>> + } >>> removeq(&selector->bindings, &binding->slink); >>> xnlock_put_irqrestore(&nklock, s); >>> >>> + if (resched) >>> + xnpod_schedule(); >>> xnfree(binding); >>> >>> xnlock_get_irqsave(&nklock, s); >>> >> Works perfectly! You may test yourself using the RT-TCP examples from >> latest RTnet git. :) > > Ok. Merged. It would need some work, as my test targets are all running > nfs. But that is certainly possible, as I think rtnetproxy now supports > UDP, does it?
Yep, should work, Wolfgang added it for the manroland scenario. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core