Module: xenomai-forge
Branch: next
Commit: 3c345ce7491ba56bf9831806ff85ddffcd1c662c
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=3c345ce7491ba56bf9831806ff85ddffcd1c662c

Author: Philippe Gerum <r...@xenomai.org>
Date:   Tue May  6 18:29:36 2014 +0200

lib/cobalt: expose sigqueue() service

---

 doc/asciidoc/MIGRATION.adoc |   12 ++++++++----
 include/cobalt/signal.h     |    3 +++
 lib/cobalt/cobalt.wrappers  |    1 +
 lib/cobalt/signal.c         |   14 ++++++++++++++
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/doc/asciidoc/MIGRATION.adoc b/doc/asciidoc/MIGRATION.adoc
index b7a5787..3eb5dc9 100644
--- a/doc/asciidoc/MIGRATION.adoc
+++ b/doc/asciidoc/MIGRATION.adoc
@@ -501,16 +501,20 @@ condition variable).
 - Support for Xenomai real-time signals is available.
 
 [normal]
-Cobalt replacements for +sigwait()+, +sigwaitinfo()+, +sigtimedwait()+
-and +kill()+ are available. +pthread_kill()+ was changed to send
-thread-directed Xenomai signals (instead of regular Linux signals).
+Cobalt replacements for +sigwait()+, +sigwaitinfo()+,
++sigtimedwait()+, +sigqueue()+ and +kill()+ are
+available. +pthread_kill()+ was changed to send thread-directed
+Xenomai signals (instead of regular Linux signals).
 
 [normal]
 Cobalt-based signals are stricly real-time. Both the sender and
 receiver sides work exclusively from the primary domain. However, only
 synchronous handling is available, with a thread waiting explicitly
 for a set of signals, using one of the +sigwait+ calls. There is no
-support for asynchronous delivery of signals to handlers.
+support for asynchronous delivery of signals to handlers. For this
+reason, there is no provision in the Cobalt API for masking signals,
+as Cobalt signals are implicitly blocked for a thread until the latter
+invokes one of the +sigwait+ calls.
 
 [normal]
 Signals from SIGRTMIN..SIGRTMAX are queued.
diff --git a/include/cobalt/signal.h b/include/cobalt/signal.h
index 02e91c6..febc752 100644
--- a/include/cobalt/signal.h
+++ b/include/cobalt/signal.h
@@ -47,6 +47,9 @@ COBALT_DECL(int, sigtimedwait(const sigset_t *set, siginfo_t 
*si,
 
 COBALT_DECL(int, kill(pid_t pid, int sig));
 
+COBALT_DECL(int, sigqueue(pid_t pid, int sig,
+                         const union sigval value));
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/cobalt/cobalt.wrappers b/lib/cobalt/cobalt.wrappers
index ef5f8ba..ecbfe94 100644
--- a/lib/cobalt/cobalt.wrappers
+++ b/lib/cobalt/cobalt.wrappers
@@ -111,5 +111,6 @@
 --wrap sigwaitinfo
 --wrap sigtimedwait
 --wrap sigpending
+--wrap sigqueue
 --wrap kill
 --wrap sleep
diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
index 8ff9090..98422e1 100644
--- a/lib/cobalt/signal.c
+++ b/lib/cobalt/signal.c
@@ -94,3 +94,17 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
 
        return 0;
 }
+
+COBALT_IMPL(int, sigqueue, (pid_t pid, int sig, const union sigval value))
+{
+       int ret;
+
+       ret = XENOMAI_SKINCALL3(__cobalt_muxid,
+                               sc_cobalt_sigqueue, pid, sig, &value);
+       if (ret) {
+               errno = -ret;
+               return -1;
+       }
+
+       return 0;
+}


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to