aboutsummaryrefslogtreecommitdiffstats
path: root/src/chevents.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-20 20:14:42 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-20 20:14:42 +0000
commitdaabc2b079b17a41ca2f1a2a6423373f811402ba (patch)
tree9a1b5552939d5ee04de29b10e0de0eb4defedea9 /src/chevents.c
parent83762f45fdeaa0702186ce7773242859350c90ab (diff)
downloadChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.tar.gz
ChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.tar.bz2
ChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@791 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chevents.c')
-rw-r--r--src/chevents.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/chevents.c b/src/chevents.c
index 35f3505de..4fd8286ad 100644
--- a/src/chevents.c
+++ b/src/chevents.c
@@ -37,13 +37,13 @@
*/
void chEvtRegisterMask(EventSource *esp, EventListener *elp, eventmask_t emask) {
- chSysLock();
+ chDbgCheck((esp != NULL) && (elp != NULL), "chEvtRegisterMask");
+ chSysLock();
elp->el_next = esp->es_next;
esp->es_next = elp;
elp->el_listener = currp;
elp->el_mask = emask;
-
chSysUnlock();
}
@@ -59,10 +59,12 @@ void chEvtRegisterMask(EventSource *esp, EventListener *elp, eventmask_t emask)
* found on top of the list).
*/
void chEvtUnregister(EventSource *esp, EventListener *elp) {
- EventListener *p = (EventListener *)esp;
+ EventListener *p;
- chSysLock();
+ chDbgCheck((esp != NULL) && (elp != NULL), "chEvtUnregister");
+ p = (EventListener *)esp;
+ chSysLock();
while (p->el_next != (EventListener *)esp) {
if (p->el_next == elp) {
p->el_next = elp->el_next;
@@ -70,7 +72,6 @@ void chEvtUnregister(EventSource *esp, EventListener *elp) {
}
p = p->el_next;
}
-
chSysUnlock();
}
@@ -117,10 +118,10 @@ eventmask_t chEvtPend(eventmask_t mask) {
*/
void chEvtSignal(Thread *tp, eventmask_t mask) {
- chSysLock();
+ chDbgCheck(tp != NULL, "chEvtSignal");
+ chSysLock();
chEvtSignalI(tp, mask);
-
chSysUnlock();
}
@@ -132,8 +133,9 @@ void chEvtSignal(Thread *tp, eventmask_t mask) {
*/
void chEvtSignalI(Thread *tp, eventmask_t mask) {
- tp->p_epending |= mask;
+ chDbgCheck(tp != NULL, "chEvtSignalI");
+ tp->p_epending |= mask;
/* Test on the AND/OR conditions wait states.*/
if (((tp->p_state == PRWTOREVT) && ((tp->p_epending & tp->p_ewmask) != 0)) ||
((tp->p_state == PRWTANDEVT) && ((tp->p_epending & tp->p_ewmask) == tp->p_ewmask)))
@@ -149,10 +151,8 @@ void chEvtSignalI(Thread *tp, eventmask_t mask) {
void chEvtBroadcast(EventSource *esp) {
chSysLock();
-
chEvtBroadcastI(esp);
chSchRescheduleS();
-
chSysUnlock();
}
@@ -165,6 +165,8 @@ void chEvtBroadcast(EventSource *esp) {
void chEvtBroadcastI(EventSource *esp) {
EventListener *elp;
+ chDbgCheck(esp != NULL, "chEvtBroadcastI");
+
elp = esp->es_next;
while (elp != (EventListener *)esp) {
chEvtSignalI(elp->el_listener, elp->el_mask);
@@ -183,9 +185,14 @@ void chEvtBroadcastI(EventSource *esp) {
void chEvtDispatch(const evhandler_t handlers[], eventmask_t mask) {
eventid_t eid;
+ chDbgCheck(handlers != NULL, "chEvtDispatch");
+
eid = 0;
while (mask) {
if (mask & EVENT_MASK(eid)) {
+ chDbgAssert(handlers[eid] != NULL,
+ "chEvtDispatch(), #1",
+ "null handler");
mask &= ~EVENT_MASK(eid);
handlers[eid](eid);
}