1
0
Fork 0
forked from len0rd/rockbox

Lil' tweak to plugins using remove_thread. Just use remove_thread(NULL) to have a thread remove itself. No subsequent yield() is needed either. Small Note: in current scheduler implementation it safe to call remove_thread IFF 1) thread removes itself 2) its state is known to be running (1 implies 2) as any objects with the waiting removed thread will be corrupted (m->thread, q->thread no longer valid or no longer same object if recycled, etc.).

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11826 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2006-12-21 02:33:01 +00:00
parent bb0358647d
commit d19ca324fc
2 changed files with 9 additions and 17 deletions

View file

@ -202,7 +202,6 @@ struct
/* communication to the worker thread */
struct
{
struct thread_entry *id; /* Pointer of the thread */
bool foreground; /* set as long as we're owning the UI */
bool exiting; /* signal to the thread that we want to exit */
bool ended; /* response from the thread, that is has exited */
@ -1117,8 +1116,7 @@ void thread(void)
} while (!gTread.exiting);
gTread.ended = true; /* acknowledge the exit */
rb->remove_thread(gTread.id); /* commit suicide */
rb->yield(); /* pass control to other threads, we won't return */
rb->remove_thread(NULL); /* commit suicide */
}
/* callback to end the TSR plugin, called before a new one gets loaded */
@ -1172,8 +1170,8 @@ int main(void* parameter)
rb->memset(&gTread, 0, sizeof(gTread));
gTread.foreground = true;
gTread.id = rb->create_thread(thread, stack, stacksize, "CDC"
IF_PRIO(, PRIORITY_BACKGROUND));
rb->create_thread(thread, stack, stacksize, "CDC"
IF_PRIO(, PRIORITY_BACKGROUND));
#ifdef DEBUG
do