<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 29, 2021 at 9:06 AM Gedare Bloom <<a href="mailto:gedare@rtems.org">gedare@rtems.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 29, 2021 at 12:24 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Do not use an enum as a bit field.  Document the state flags.<br></blockquote></div></div></blockquote><div><br></div><div>Is this a new style rule that needs to be documented?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
This fix relates to a Coverity issue (PW.MIXED_ENUM_TYPE).<br>
---<br>
 cpukit/include/rtems/score/thread.h | 57 ++++++++++++++++++++++++-----<br>
 1 file changed, 47 insertions(+), 10 deletions(-)<br>
<br>
diff --git a/cpukit/include/rtems/score/thread.h b/cpukit/include/rtems/score/thread.h<br>
index 8785879184..82d98f278a 100644<br>
--- a/cpukit/include/rtems/score/thread.h<br>
+++ b/cpukit/include/rtems/score/thread.h<br>
@@ -659,22 +659,59 @@ typedef struct {<br>
 } Thread_Action_control;<br>
<br>
 /**<br>
- * @brief Thread life states.<br>
+ * @brief This type represents the thread life state.<br>
  *<br>
- * The thread life states are orthogonal to the thread states used for<br>
+ * The thread life state are orthogonal to the thread state used for<br></blockquote><div>s/are/is</div><div>or s/life state/life states</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  * synchronization primitives and blocking operations.  They reflect the state </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  * changes triggered with thread restart and delete requests.<br>
  *<br>
- * The individual state values must be a power of two to allow use of bit<br>
+ * The individual state flags must be a power of two to allow use of bit<br>
  * operations to manipulate and evaluate the thread life state.<br>
  */<br>
-typedef enum {<br>
-  THREAD_LIFE_PROTECTED = 0x1,<br>
-  THREAD_LIFE_RESTARTING = 0x2,<br>
-  THREAD_LIFE_TERMINATING = 0x4,<br>
-  THREAD_LIFE_CHANGE_DEFERRED = 0x8,<br>
-  THREAD_LIFE_DETACHED = 0x10<br>
-} Thread_Life_state;<br>
+typedef int Thread_Life_state;<br></blockquote><div> </div><div>Maybe unsigned is better? It can be safer sometimes for undefined behaviors. this shouldn't matter greatly. It just doesn't make sense to call a combination of flags as a signed value.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
+/**<br>
+ * @brief Indicates that the thread life is protected.<br>
+ *<br>
+ * If this flag is set, then the thread restart or delete requests are deferred<br>
+ * until the protection and deferred change flags are cleared.  It is used by<br>
+ * _Thread_Set_life_protection().<br>
+ */<br></blockquote><div>thanks for improving the doxygen along the way.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+#define THREAD_LIFE_PROTECTED 0x1<br>
+<br>
+/**<br>
+ * @brief Indicates that thread is restarting.<br>
+ *<br>
+ * If this flag is set, then a thread restart request is in pending. See<br>
+ * _Thread_Restart_self() and _Thread_Restart_other().<br>
+ */<br>
+#define THREAD_LIFE_RESTARTING 0x2<br>
+<br>
+/**<br>
+ * @brief Indicates that thread is terminating.<br>
+ *<br>
+ * If this flag is set, then a thread termination request is in pending.  See<br>
+ * _Thread_Exit() and _Thread_Cancel().<br>
+ */<br>
+#define THREAD_LIFE_TERMINATING 0x4<br>
+<br>
+/**<br>
+ * @brief Indicates that thread life changes are deferred.<br>
+ *<br>
+ * If this flag is set, then the thread restart or delete requests are deferred<br>
+ * until the protection and deferred change flags are cleared.  It is used by<br>
+ * pthread_setcanceltype().<br>
+ */<br>
+#define THREAD_LIFE_CHANGE_DEFERRED 0x8<br>
+<br>
+/**<br>
+ * @brief Indicates that thread is detached.<br>
+ *<br>
+ * If this flag is set, then the thread is detached.  Detached threads do not<br>
+ * wait during termination for other threads to join.  See rtems_task_delete(),<br>
+ * rtems_task_exit(), and pthread_detach().<br>
+ */<br>
+#define THREAD_LIFE_DETACHED 0x10<br>
<br>
 /**<br>
  * @brief Thread life control.<br>
-- <br>
2.26.2<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a></blockquote></div></div>