On 10/16/2015 04:56 PM, Jan Kiszka wrote: > On 2015-10-16 16:49, Jan Kiszka wrote: >> Hi, >> >> kill() is currently handled by libcobalt such that PIDs <= 0 are >> forwarded to Linux and PIDs > 0 are considered to target only Xenomai >> threads. But what if the user wants to address a regular Linux task from >> within a Xenomai application? Shouldn't we retry kill via the Linux path >> if Xenomai's syscall reports ESRCH? >> > > IOW: > > diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c > index aac4059..7e03301 100644 > --- a/lib/cobalt/signal.c > +++ b/lib/cobalt/signal.c > @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig)) > > ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig); > if (ret) { > + /* Retry with regular kill is no RT target was found. */ > + if (ret == -ESRCH) > + return __STD(kill(pid, sig)); > + > errno = -ret; > return -1; > } > > Jan >
This may break code that sends signal 0 to detect whether a rt thread exists (like copperplate does), which is the reason for the lack of forwarding IIRC. (ret == -ESRCH && sig) would be required to forward without breaking such assumption. -- Philippe. _______________________________________________ Xenomai mailing list Xenomai@xenomai.org http://xenomai.org/mailman/listinfo/xenomai