From d19ca324fcd8df0d62d1f7e8ee2b16c9bdbef0e8 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Thu, 21 Dec 2006 02:33:01 +0000 Subject: 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 --- apps/plugins/alpine_cdc.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'apps/plugins/alpine_cdc.c') diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c index 65108680c6..9c1bc8bd0b 100644 --- a/apps/plugins/alpine_cdc.c +++ b/apps/plugins/alpine_cdc.c @@ -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 -- cgit v1.2.3