Hi Enno, On Jan 10, 2011, at 9:39 AM, Luebbers, Enno wrote:
> Hi, > > first of all, happy new year and all the best wishes for 2011 to all of you. > > I was also able to reproduce the sporadic failures of mutex_test_posix. I > suspect the root of it in the scheduling interactions between the delegate > threads and the main() thread -- it appears that occasionally the delegate > thread is not activated in time and thus fails to lock the mutex. This, in > turn, causes the main() thread to lock the mutex early. > > I've played a bit with the thread priorities of main() and the delegate. > However, even with the delegates having a higher priority than main(), the > failure still showed up. I've tried the same, but with changed priorities I could *not* reproduce the error. (I did 20 tries). I've added the following lines: mutex_test_posix.c 37: cyg_handle_t my = cyg_thread_self(); 38: cyg_thread_set_priority(my, 10); ecos-patched/ecos/packages/reconos/current/src/delegate.tmpl 334: cyg_handle_t my = cyg_thread_self(); 335: cyg_thread_set_priority(my, 1); Does this also work for you? Cheers, Ariane > The only way I could prevent the "too early" error from happening was to > change the test's source could as in the following diff: > > diff --git a/tests/automated/mutex/sw/mutex_test_posix.c > b/tests/automated/mutex > index 8385469..e066872 100644 > --- a/tests/automated/mutex/sw/mutex_test_posix.c > +++ b/tests/automated/mutex/sw/mutex_test_posix.c > @@ -50,7 +50,7 @@ int main( int argc, char *argv[] ) > unsigned long ticks = cyg_current_time(); > //printf("current time = %ld ticks\n",ticks); // XXX remove > pthread_mutex_unlock(&mutex); > - while(cyg_current_time() - ticks < 10); // wait for 0.1 > seconds > + cyg_thread_delay(10); > pthread_mutex_lock(&mutex); > ticks = cyg_current_time() - ticks; > //printf("delta t = %ld ticks\n", ticks); // XXX remove > > After this change I wasn't able to reproduce the error, but that doesn't mean > it's gone. Also, even without the delay(), the first mutex_unlock() should > cause the delegate to be scheduled if it has a higher priority. > > Any ideas what could be causing this? > > Best regards > - Enno > >> -----Ursprüngliche Nachricht----- >> Von: reconos-devel-boun...@lists.reconos.de [mailto:reconos-devel- >> boun...@lists.reconos.de] Im Auftrag von Ariane Keller >> Gesendet: Donnerstag, 6. Januar 2011 13:12 >> An: Discussions for ReconOS development >> Betreff: Re: [reconos-devel] ML605 automated tests >> >> Hi all >> >> On Dec 14, 2010, at 4:17 PM, Markus wrote: >> >>> Hi *, >>> >>> I performed the automated tests on the ML605. 64 of 65 tests succeeded, >> but one test failed (mutex_test_posix). > [...] >>> It would be interesting to know, if anyone can reproduce this failure. >> >> I finally managed to do the tests. The exec_mutex_posix test also failed in >> my setup. >> My statistics are: >> Success: 6 runs >> 1 failure: 4 runs >> >> failure: >> mutex lock and release by hwthread: too early >> (occurrence: once but at different stages) >> >> All the other tests were ok. >> >> Cheers, >> Ariane >> > _______________________________________________ > Reconos-devel_lists.reconos.de mailing list > reconos-devel@lists.reconos.de > https://ml01.ispgateway.de/mailman/listinfo/reconos-devel_lists.reconos.de _______________________________________________ Reconos-devel_lists.reconos.de mailing list reconos-devel@lists.reconos.de https://ml01.ispgateway.de/mailman/listinfo/reconos-devel_lists.reconos.de