aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel/src
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-09-20 17:08:22 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-09-20 17:08:22 +0000
commit5463b41d3a7a81da20c88631535c088decd61999 (patch)
treedaae26b7e2f842c1a869563e600e1df1fb1b3192 /os/kernel/src
parentbd339dfa99310b372fc2699b79c700bbec7a0543 (diff)
downloadChibiOS-5463b41d3a7a81da20c88631535c088decd61999.tar.gz
ChibiOS-5463b41d3a7a81da20c88631535c088decd61999.tar.bz2
ChibiOS-5463b41d3a7a81da20c88631535c088decd61999.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3362 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel/src')
-rw-r--r--os/kernel/src/chthreads.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/os/kernel/src/chthreads.c b/os/kernel/src/chthreads.c
index 73236c850..b2231ef17 100644
--- a/os/kernel/src/chthreads.c
+++ b/os/kernel/src/chthreads.c
@@ -335,6 +335,27 @@ void chThdYield(void) {
* @api
*/
void chThdExit(msg_t msg) {
+
+ chSysLock();
+ chThdExitS(msg);
+ /* The thread never returns here.*/
+}
+
+/**
+ * @brief Terminates the current thread.
+ * @details The thread goes in the @p THD_STATE_FINAL state holding the
+ * specified exit status code, other threads can retrieve the
+ * exit status code by invoking the function @p chThdWait().
+ * @post Eventual code after this function will never be executed,
+ * this function never returns. The compiler has no way to
+ * know this so do not assume that the compiler would remove
+ * the dead code.
+ *
+ * @param[in] msg thread exit code
+ *
+ * @sclass
+ */
+void chThdExitS(msg_t msg) {
Thread *tp = currp;
chSysLock();
@@ -353,7 +374,8 @@ void chThdExit(msg_t msg) {
REG_REMOVE(tp);
#endif
chSchGoSleepS(THD_STATE_FINAL);
- chSysUnlock();
+ /* The thread never returns here.*/
+ chDbgAssert(FALSE, "chThdExitS(), #1", "zombies apocalypse");
}
#if CH_USE_WAITEXIT || defined(__DOXYGEN__)