aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/src/chregistry.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2016-02-24 11:22:05 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2016-02-24 11:22:05 +0000
commita2072b5560adf07640b43107e00582b31658540d (patch)
treeaf75befa80adfd7624d3b63fe0f0233d0074efc0 /os/rt/src/chregistry.c
parent5181b1e391f3480d375a484fb55e70fd5586a5d1 (diff)
downloadChibiOS-a2072b5560adf07640b43107e00582b31658540d.tar.gz
ChibiOS-a2072b5560adf07640b43107e00582b31658540d.tar.bz2
ChibiOS-a2072b5560adf07640b43107e00582b31658540d.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8940 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/rt/src/chregistry.c')
-rw-r--r--os/rt/src/chregistry.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/os/rt/src/chregistry.c b/os/rt/src/chregistry.c
index 944383bf1..7d870897b 100644
--- a/os/rt/src/chregistry.c
+++ b/os/rt/src/chregistry.c
@@ -101,8 +101,12 @@ ROMCONST chdebug_t ch_debug = {
(uint8_t)0,
#endif
(uint8_t)_offsetof(thread_t, state),
- (uint8_t)0, /* Flags no more part of the structure. */
- (uint8_t)0, /* Refs no more part of the structure. */
+ (uint8_t)_offsetof(thread_t, flags),
+#if CH_CFG_USE_DYNAMIC == TRUE
+ (uint8_t)_offsetof(thread_t, refs),
+#else
+ (uint8_t)0,
+#endif
#if CH_CFG_TIME_QUANTUM > 0
(uint8_t)_offsetof(thread_t, preempt),
#else
@@ -132,6 +136,9 @@ thread_t *chRegFirstThread(void) {
chSysLock();
tp = ch.rlist.newer;
+#if CH_CFG_USE_DYNAMIC == TRUE
+ tp->refs++;
+#endif
chSysUnlock();
return tp;
@@ -158,7 +165,16 @@ thread_t *chRegNextThread(thread_t *tp) {
/*lint -restore*/
ntp = NULL;
}
+#if CH_CFG_USE_DYNAMIC == TRUE
+ else {
+ chDbgAssert(ntp->refs < (trefs_t)255, "too many references");
+ ntp->refs++;
+ }
+#endif
chSysUnlock();
+#if CH_CFG_USE_DYNAMIC == TRUE
+ chThdRelease(tp);
+#endif
return ntp;
}
@@ -186,7 +202,6 @@ thread_t *chRegFindThreadByName(const char *name) {
return NULL;
}
-#endif /* CH_CFG_USE_REGISTRY == TRUE */
/**
* @brief Confirms that a pointer is a valid thread pointer.
@@ -212,4 +227,6 @@ thread_t *chRegFindThreadByPointer(thread_t *tp) {
return NULL;
}
+#endif /* CH_CFG_USE_REGISTRY == TRUE */
+
/** @} */