aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel/src/chthreads.c
diff options
context:
space:
mode:
authorbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-12-08 20:17:13 +0000
committerbarthess <barthess@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-12-08 20:17:13 +0000
commit4ca9e4ad312453e11c17746aaa01b4fb637eb83a (patch)
treeb8ad2a8049314384e30f414b146ee4a875fbc953 /os/kernel/src/chthreads.c
parent8a3ce5e27333e4dc6bd8047c440b84f3060d7d0e (diff)
parent8196de6aef7616f7df96d757dddc9cfa9eb661dc (diff)
downloadChibiOS-4ca9e4ad312453e11c17746aaa01b4fb637eb83a.tar.gz
ChibiOS-4ca9e4ad312453e11c17746aaa01b4fb637eb83a.tar.bz2
ChibiOS-4ca9e4ad312453e11c17746aaa01b4fb637eb83a.zip
RTC for F4x branch.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/rtc_dev@3585 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel/src/chthreads.c')
-rw-r--r--os/kernel/src/chthreads.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/os/kernel/src/chthreads.c b/os/kernel/src/chthreads.c
index 46039561b..7b48f2b00 100644
--- a/os/kernel/src/chthreads.c
+++ b/os/kernel/src/chthreads.c
@@ -32,8 +32,6 @@
* area. In this scenario static variables are shared among all
* threads while automatic variables are local to the thread.<br>
* Operations defined for threads:
- * - <b>Init</b>, a thread is prepared and put in the suspended
- * state.
* - <b>Create</b>, a thread is started on the specified thread
* function. This operation is available in multiple variants,
* both static and dynamic.
@@ -335,9 +333,29 @@ void chThdYield(void) {
* @api
*/
void chThdExit(msg_t msg) {
- Thread *tp = currp;
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;
+
tp->p_u.exitcode = msg;
#if defined(THREAD_EXT_EXIT_HOOK)
THREAD_EXT_EXIT_HOOK(tp);
@@ -353,6 +371,8 @@ void chThdExit(msg_t msg) {
REG_REMOVE(tp);
#endif
chSchGoSleepS(THD_STATE_FINAL);
+ /* The thread never returns here.*/
+ chDbgAssert(FALSE, "chThdExitS(), #1", "zombies apocalypse");
}
#if CH_USE_WAITEXIT || defined(__DOXYGEN__)