Module: xenomai-forge Branch: master Commit: 147a310619b1c6804ef4b27122906e9ea80698ac URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=147a310619b1c6804ef4b27122906e9ea80698ac
Author: Philippe Gerum <r...@xenomai.org> Date: Fri Nov 11 19:10:06 2011 +0100 copperplate/semobj: introduce SEMOBJ_WARNDEL modifier When set in the semobj creation flags passed to semobj_init(), this modifier causes semobj_destroy() to return a non-zero positive value in case threads were awaken as a result of destroying the semaphore object. --- include/copperplate/semobj.h | 1 + lib/copperplate/semobj.c | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/copperplate/semobj.h b/include/copperplate/semobj.h index 5ae03cc..fc8bdc9 100644 --- a/include/copperplate/semobj.h +++ b/include/copperplate/semobj.h @@ -48,6 +48,7 @@ struct semobj { #define SEMOBJ_PRIO 0x1 #define SEMOBJ_PULSE 0x2 +#define SEMOBJ_WANRDEL 0x4 #ifdef __cplusplus extern "C" { diff --git a/lib/copperplate/semobj.c b/lib/copperplate/semobj.c index c44380f..d1605ff 100644 --- a/lib/copperplate/semobj.c +++ b/lib/copperplate/semobj.c @@ -35,6 +35,9 @@ int semobj_init(struct semobj *smobj, int flags, int value, if (flags & SEMOBJ_PULSE) sem_flags |= SEM_PULSE; + if (flags & SEMOBJ_WANRDEL) + sem_flags |= SEM_WARNDEL; + ret = sem_init_np(&smobj->core.sem, sem_flags, value); if (ret) return __bt(-errno); @@ -50,7 +53,7 @@ int semobj_destroy(struct semobj *smobj) int ret; ret = __RT(sem_destroy(&smobj->core.sem)); - if (ret) + if (ret < 0) return errno == EINVAL ? -EIDRM : -errno; /* * All waiters have been unblocked with EINVAL, and therefore @@ -60,7 +63,7 @@ int semobj_destroy(struct semobj *smobj) fnref_get(finalizer, smobj->finalizer); finalizer(smobj); - return 0; + return ret; } int semobj_post(struct semobj *smobj) @@ -153,9 +156,7 @@ int semobj_destroy(struct semobj *smobj) if (syncobj_lock(&smobj->core.sobj, &syns)) return -EINVAL; - syncobj_destroy(&smobj->core.sobj, &syns); - - return 0; + return syncobj_destroy(&smobj->core.sobj, &syns); } int semobj_post(struct semobj *smobj) _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git