diff --git a/docs/Doxyfile b/docs/Doxyfile index 074515d8e..06ec78649 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = ChibiOS/RT -PROJECT_NUMBER = "0.3.3 beta" +PROJECT_NUMBER = "0.3.4 beta" OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/readme.txt b/readme.txt index f16e4cdac..a3bed78b4 100644 --- a/readme.txt +++ b/readme.txt @@ -38,6 +38,11 @@ AVR-AT90CANx-GCC - Port on AVER AT90CAN128, not complete yet. *** Releases *** ***************************************************************************** +*** 0.3.4 *** +- Fixed a problem in chVTSetI(). +- Modified chEvtWaitTimeout() to work correctly in the TIME_INFINITE + scenario. + *** 0.3.3 *** - Modified the chVTSetI(), now for the "time" parameter can have value zero with meaning "infinite". This allows all the APIs with timeout parameters diff --git a/src/chdelta.c b/src/chdelta.c index f87aec5a9..8a8100e5f 100644 --- a/src/chdelta.c +++ b/src/chdelta.c @@ -50,10 +50,9 @@ void chVTInit(void) { */ void chVTSetI(VirtualTimer *vtp, t_time time, t_vtfunc vtfunc, void *par) { - vtp->vt_func = vtfunc; vtp->vt_par = par; - if (time) { + vtp->vt_func = vtfunc; VirtualTimer *p = dlist.dl_next; while (p->vt_dtime < time) { time -= p->vt_dtime; @@ -66,6 +65,8 @@ void chVTSetI(VirtualTimer *vtp, t_time time, t_vtfunc vtfunc, void *par) { if (p != (VirtualTimer *)&dlist) p->vt_dtime -= time; } + else + vtp->vt_func = NULL; } /** diff --git a/src/chevents.c b/src/chevents.c index a38975216..f88412e11 100644 --- a/src/chevents.c +++ b/src/chevents.c @@ -205,6 +205,7 @@ t_eventid chEvtWaitTimeout(t_eventmask ewmask, t_time time) { t_eventid i; t_eventmask m; + t_msg msg; chSysLock(); @@ -221,9 +222,10 @@ t_eventid chEvtWaitTimeout(t_eventmask ewmask, currp->p_ewmask = ewmask; chSchGoSleepS(PRWTEVENT); if (!vt.vt_func) { + t_msg msg = currp->p_rdymsg; chSysUnlock(); - return RDY_TIMEOUT; // No need to read t_rdymsg value, it is a timeout. + return msg; } chVTResetI(&vt); }