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