Page 1 of 1

thread problems

Posted: Fri Dec 02, 2005 2:38 am
by ntba2
Hi,

I have several worker threads that are rotated by a scheduler thread whenever it is woken up by an alarm interrupt;
One that checks for gamepad input and updates the UI and another that decodes and streams an mp3.

The problem is when the UI thread makes a call to SifCallRpc it some times happens that it doesn't lose control and the mp3 thread starves. I think the alarm callback is not getting executed but I am not sure what's going on..

here is the code if anyone wants to take a look
http://ntba2.de/junk/scheduler.c
http://ntba2.de/junk/scheduler.h


ntba2

Posted: Sat Dec 03, 2005 6:44 pm
by EEUG
...I would try to alter "void Scheduler_Run( void )" function this way:

alarmID = SetAlarm( SCHEDULER_TIME_SLICE, Scheduler_Alarm, 0 );

while(1){
SleepTread ();
RotateThreadReadyQueue( SCHEDULER_PRIO_THREAD );
}

and 'Scheduler_Alarm' like this:

void Scheduler_Alarm( s32 id, u16 time, void *arg ) {
iWakeupThread ( Scheduler_RunThreadID );
}

...or even better to get rid of 'Scheduler_Run' function, and use only alarm handler to rotate therad queue. I'm not sure if it will work, it's just a suggestion :)
Best regards
Eugene

Posted: Mon Dec 05, 2005 9:01 am
by ntba2
Hi EEUG,

thanks I'll give that a try and see if it makes any difference