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

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sat Dec  3 18:20:19 2011 +0100

cobalt/monitor: save useless traps in sync ops

---

 lib/cobalt/internal.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/lib/cobalt/internal.c b/lib/cobalt/internal.c
index 832c520..d04bfd0 100644
--- a/lib/cobalt/internal.c
+++ b/lib/cobalt/internal.c
@@ -180,10 +180,14 @@ void cobalt_monitor_grant(cobalt_monitor_t *mon, unsigned 
long *u_mode)
 
 int cobalt_monitor_grant_sync(cobalt_monitor_t *mon, unsigned long *u_mode)
 {
+       struct cobalt_monitor_data *datp = get_monitor_data(mon);
        int ret, oldtype;
 
        cobalt_monitor_grant(mon, u_mode);
 
+       if ((datp->flags & COBALT_MONITOR_PENDED) == 0)
+               return 0;
+
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
        ret = XENOMAI_SKINCALL1(__cobalt_muxid,
@@ -207,10 +211,14 @@ void cobalt_monitor_grant_all(cobalt_monitor_t *mon, 
unsigned long *u_mode)
 
 int cobalt_monitor_grant_all_sync(cobalt_monitor_t *mon, unsigned long *u_mode)
 {
+       struct cobalt_monitor_data *datp = get_monitor_data(mon);
        int ret, oldtype;
 
        cobalt_monitor_grant_all(mon, u_mode);
 
+       if ((datp->flags & COBALT_MONITOR_PENDED) == 0)
+               return 0;
+
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
        ret = XENOMAI_SKINCALL1(__cobalt_muxid,
@@ -234,10 +242,14 @@ void cobalt_monitor_drain(cobalt_monitor_t *mon)
 
 int cobalt_monitor_drain_sync(cobalt_monitor_t *mon)
 {
+       struct cobalt_monitor_data *datp = get_monitor_data(mon);
        int ret, oldtype;
 
        cobalt_monitor_drain(mon);
 
+       if ((datp->flags & COBALT_MONITOR_PENDED) == 0)
+               return 0;
+
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
        ret = XENOMAI_SKINCALL1(__cobalt_muxid,
@@ -261,10 +273,14 @@ void cobalt_monitor_drain_all(cobalt_monitor_t *mon)
 
 int cobalt_monitor_drain_all_sync(cobalt_monitor_t *mon)
 {
+       struct cobalt_monitor_data *datp = get_monitor_data(mon);
        int ret, oldtype;
 
        cobalt_monitor_drain_all(mon);
 
+       if ((datp->flags & COBALT_MONITOR_PENDED) == 0)
+               return 0;
+
        pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
        ret = XENOMAI_SKINCALL1(__cobalt_muxid,


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to