Added assertions to the semaphores subsystem.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2138 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
f58963c966
commit
ece6ef6bf7
|
@ -115,6 +115,11 @@ void chSemResetI(Semaphore *sp, cnt_t n) {
|
||||||
|
|
||||||
chDbgCheck((sp != NULL) && (n >= 0), "chSemResetI");
|
chDbgCheck((sp != NULL) && (n >= 0), "chSemResetI");
|
||||||
|
|
||||||
|
chDbgAssert(((sp->s_cnt >= 0) && isempty(&sp->s_queue)) ||
|
||||||
|
((sp->s_cnt < 0) && notempty(&sp->s_queue)),
|
||||||
|
"chSemResetI(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
cnt = sp->s_cnt;
|
cnt = sp->s_cnt;
|
||||||
sp->s_cnt = n;
|
sp->s_cnt = n;
|
||||||
while (++cnt <= 0)
|
while (++cnt <= 0)
|
||||||
|
@ -148,6 +153,11 @@ msg_t chSemWaitS(Semaphore *sp) {
|
||||||
|
|
||||||
chDbgCheck(sp != NULL, "chSemWaitS");
|
chDbgCheck(sp != NULL, "chSemWaitS");
|
||||||
|
|
||||||
|
chDbgAssert(((sp->s_cnt >= 0) && isempty(&sp->s_queue)) ||
|
||||||
|
((sp->s_cnt < 0) && notempty(&sp->s_queue)),
|
||||||
|
"chSemWaitS(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
if (--sp->s_cnt < 0) {
|
if (--sp->s_cnt < 0) {
|
||||||
currp->p_u.wtobjp = sp;
|
currp->p_u.wtobjp = sp;
|
||||||
sem_insert(currp, &sp->s_queue);
|
sem_insert(currp, &sp->s_queue);
|
||||||
|
@ -198,6 +208,11 @@ msg_t chSemWaitTimeoutS(Semaphore *sp, systime_t time) {
|
||||||
|
|
||||||
chDbgCheck(sp != NULL, "chSemWaitTimeoutS");
|
chDbgCheck(sp != NULL, "chSemWaitTimeoutS");
|
||||||
|
|
||||||
|
chDbgAssert(((sp->s_cnt >= 0) && isempty(&sp->s_queue)) ||
|
||||||
|
((sp->s_cnt < 0) && notempty(&sp->s_queue)),
|
||||||
|
"chSemWaitTimeoutS(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
if (--sp->s_cnt < 0) {
|
if (--sp->s_cnt < 0) {
|
||||||
if (TIME_IMMEDIATE == time) {
|
if (TIME_IMMEDIATE == time) {
|
||||||
sp->s_cnt++;
|
sp->s_cnt++;
|
||||||
|
@ -219,6 +234,11 @@ void chSemSignal(Semaphore *sp) {
|
||||||
|
|
||||||
chDbgCheck(sp != NULL, "chSemSignal");
|
chDbgCheck(sp != NULL, "chSemSignal");
|
||||||
|
|
||||||
|
chDbgAssert(((sp->s_cnt >= 0) && isempty(&sp->s_queue)) ||
|
||||||
|
((sp->s_cnt < 0) && notempty(&sp->s_queue)),
|
||||||
|
"chSemSignal(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
if (++sp->s_cnt <= 0)
|
if (++sp->s_cnt <= 0)
|
||||||
chSchWakeupS(fifo_remove(&sp->s_queue), RDY_OK);
|
chSchWakeupS(fifo_remove(&sp->s_queue), RDY_OK);
|
||||||
|
@ -235,6 +255,11 @@ void chSemSignalI(Semaphore *sp) {
|
||||||
|
|
||||||
chDbgCheck(sp != NULL, "chSemSignalI");
|
chDbgCheck(sp != NULL, "chSemSignalI");
|
||||||
|
|
||||||
|
chDbgAssert(((sp->s_cnt >= 0) && isempty(&sp->s_queue)) ||
|
||||||
|
((sp->s_cnt < 0) && notempty(&sp->s_queue)),
|
||||||
|
"chSemSignalI(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
if (++sp->s_cnt <= 0) {
|
if (++sp->s_cnt <= 0) {
|
||||||
/* note, it is done this way in order to allow a tail call on
|
/* note, it is done this way in order to allow a tail call on
|
||||||
chSchReadyI().*/
|
chSchReadyI().*/
|
||||||
|
@ -260,6 +285,16 @@ msg_t chSemSignalWait(Semaphore *sps, Semaphore *spw) {
|
||||||
|
|
||||||
chDbgCheck((sps != NULL) && (spw != NULL), "chSemSignalWait");
|
chDbgCheck((sps != NULL) && (spw != NULL), "chSemSignalWait");
|
||||||
|
|
||||||
|
chDbgAssert(((sps->s_cnt >= 0) && isempty(&sps->s_queue)) ||
|
||||||
|
((sps->s_cnt < 0) && notempty(&sps->s_queue)),
|
||||||
|
"chSemSignalWait(), #1",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
|
chDbgAssert(((spw->s_cnt >= 0) && isempty(&spw->s_queue)) ||
|
||||||
|
((spw->s_cnt < 0) && notempty(&spw->s_queue)),
|
||||||
|
"chSemSignalWait(), #2",
|
||||||
|
"inconsistent semaphore");
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
if (++sps->s_cnt <= 0)
|
if (++sps->s_cnt <= 0)
|
||||||
chSchReadyI(fifo_remove(&sps->s_queue))->p_u.rdymsg = RDY_OK;
|
chSchReadyI(fifo_remove(&sps->s_queue))->p_u.rdymsg = RDY_OK;
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
2.0.3).
|
2.0.3).
|
||||||
- FIX: Fixed a documentation error regarding the ADC driver function
|
- FIX: Fixed a documentation error regarding the ADC driver function
|
||||||
adcStartConversion() (bug 3039890)(backported to 2.0.3).
|
adcStartConversion() (bug 3039890)(backported to 2.0.3).
|
||||||
|
- NEW: More assertions added to the semaphores subsystem.
|
||||||
- NEW: New kernel hooks: SYSTEM_TICK_EVENT_HOOK(), SYSTEM_HALT_HOOK().
|
- NEW: New kernel hooks: SYSTEM_TICK_EVENT_HOOK(), SYSTEM_HALT_HOOK().
|
||||||
- NEW: Added board files for the Olimex STM32-H103.
|
- NEW: Added board files for the Olimex STM32-H103.
|
||||||
- NEW: New kernel APIs chSysGetIdleThread() and chThdGetTicks(), the new
|
- NEW: New kernel APIs chSysGetIdleThread() and chThdGetTicks(), the new
|
||||||
|
|
Loading…
Reference in New Issue