[rtems commit] score: Add optional _CPU_Context_Destroy()

Sebastian Huber sebh at rtems.org
Tue Jul 25 09:44:24 UTC 2017


Module:    rtems
Branch:    master
Commit:    b2e1bded07232290f0edcb19e03b18dc4e8bce67
Changeset: http://git.rtems.org/rtems/commit/?id=b2e1bded07232290f0edcb19e03b18dc4e8bce67

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jul 18 14:53:16 2017 +0200

score: Add optional _CPU_Context_Destroy()

Update #3077.

---

 cpukit/score/cpu/no_cpu/rtems/score/cpu.h  | 19 +++++++++++++++++++
 cpukit/score/include/rtems/score/context.h |  7 +++++++
 cpukit/score/src/threadrestart.c           |  2 +-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
index 62e1a91..c16adc7 100644
--- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
@@ -816,6 +816,25 @@ uint32_t   _CPU_ISR_Get_level( void );
 /* Context handler macros */
 
 /**
+ * @ingroup CPUContext
+ *
+ * @brief Destroys the context of the thread.
+ *
+ * It must be implemented as a macro and an implementation is optional.  The
+ * default implementation does nothing.
+ *
+ * @param[in] _the_thread The corresponding thread.
+ * @param[in] _the_context The context to destroy.
+ *
+ * Port Specific Information:
+ *
+ * XXX document implementation including references if appropriate
+ */
+#define _CPU_Context_Destroy( _the_thread, _the_context ) \
+  { \
+  }
+
+/**
  *  @ingroup CPUContext
  * 
  * Initialize the context to a state suitable for starting a
diff --git a/cpukit/score/include/rtems/score/context.h b/cpukit/score/include/rtems/score/context.h
index 46cb460..990a602 100644
--- a/cpukit/score/include/rtems/score/context.h
+++ b/cpukit/score/include/rtems/score/context.h
@@ -146,6 +146,13 @@ extern "C" {
 #define _Context_Save_fp( _fp ) \
    _CPU_Context_save_fp( _fp )
 
+#if defined(_CPU_Context_Destroy)
+  #define _Context_Destroy( _the_thread, _the_context ) \
+    _CPU_Context_Destroy( _the_thread, _the_context )
+#else
+  #define _Context_Destroy( _the_thread, _the_context )
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 5938dcf..7ee1f88 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -205,7 +205,7 @@ static void _Thread_Free( Thread_Control *the_thread )
 #endif
 
   _Thread_queue_Destroy( &the_thread->Join_queue );
-
+  _Context_Destroy( the_thread, &the_thread->Registers );
   _Objects_Free( &information->Objects, &the_thread->Object );
 }
 




More information about the vc mailing list