summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-05-26 17:16:19 +0000
committerThomas Martitz <kugel@rockbox.org>2010-05-26 17:16:19 +0000
commitbc2f8bbc079b2b143c06739163ba229aedef90c9 (patch)
tree381161cdc0116db83647804ab1a1a21cda73e5d9
parent6d281a38968b7092af1831d2a3e144f6c98441ce (diff)
downloadrockbox-bc2f8bbc079b2b143c06739163ba229aedef90c9.zip
rockbox-bc2f8bbc079b2b143c06739163ba229aedef90c9.tar.gz
rockbox-bc2f8bbc079b2b143c06739163ba229aedef90c9.tar.bz2
rockbox-bc2f8bbc079b2b143c06739163ba229aedef90c9.tar.xz
Since the sdl to target tree move, the main thread cannot be removed anymore,
since it's now the default thread which is implicitely created by starting the sim. This caused a segfault that r26283 tried to fix. Revert r26283 and protect the main thread from being removed. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26315 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/misc.c1
-rw-r--r--firmware/target/hosted/sdl/button-sdl.c1
-rw-r--r--firmware/target/hosted/sdl/thread-sdl.c7
3 files changed, 6 insertions, 3 deletions
diff --git a/apps/misc.c b/apps/misc.c
index 3dfc289..95c0dd6 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -256,7 +256,6 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter)
(void)parameter;
bookmark_autobookmark(false);
call_storage_idle_notifys(true);
- exit(0);
#else
long msg_id = -1;
int i;
diff --git a/firmware/target/hosted/sdl/button-sdl.c b/firmware/target/hosted/sdl/button-sdl.c
index 629d3aa..e9fc037 100644
--- a/firmware/target/hosted/sdl/button-sdl.c
+++ b/firmware/target/hosted/sdl/button-sdl.c
@@ -176,7 +176,6 @@ void gui_message_loop(void)
case SDL_QUIT:
{
sim_exit_irq_handler();
- SDL_Quit();
exit(EXIT_SUCCESS);
break;
}
diff --git a/firmware/target/hosted/sdl/thread-sdl.c b/firmware/target/hosted/sdl/thread-sdl.c
index 28a9cb8..da43d6e 100644
--- a/firmware/target/hosted/sdl/thread-sdl.c
+++ b/firmware/target/hosted/sdl/thread-sdl.c
@@ -566,7 +566,12 @@ void remove_thread(unsigned int thread_id)
void thread_exit(void)
{
- remove_thread(THREAD_ID_CURRENT);
+ struct thread_entry *t = thread_id_entry(THREAD_ID_CURRENT);
+ /* the main thread cannot be removed since it's created implicitely
+ * by starting the program;
+ * it has no valid jumpbuf to exit, do nothing for now */
+ if (t != &threads[0])
+ remove_thread(t->id);
}
void thread_wait(unsigned int thread_id)