diff options
| author | Thomas Martitz <kugel@rockbox.org> | 2010-05-26 17:16:19 +0000 |
|---|---|---|
| committer | Thomas Martitz <kugel@rockbox.org> | 2010-05-26 17:16:19 +0000 |
| commit | bc2f8bbc079b2b143c06739163ba229aedef90c9 (patch) | |
| tree | 381161cdc0116db83647804ab1a1a21cda73e5d9 | |
| parent | 6d281a38968b7092af1831d2a3e144f6c98441ce (diff) | |
| download | rockbox-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.c | 1 | ||||
| -rw-r--r-- | firmware/target/hosted/sdl/button-sdl.c | 1 | ||||
| -rw-r--r-- | firmware/target/hosted/sdl/thread-sdl.c | 7 |
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) |