diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-09-20 17:08:22 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-09-20 17:08:22 +0000 |
commit | 5463b41d3a7a81da20c88631535c088decd61999 (patch) | |
tree | daae26b7e2f842c1a869563e600e1df1fb1b3192 /os/kernel/src | |
parent | bd339dfa99310b372fc2699b79c700bbec7a0543 (diff) | |
download | ChibiOS-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.c | 24 |
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__)
|