194 |
194 |
#if CH_CFG_USE_WAITEXIT == TRUE
|
195 |
195 |
list_init(&tp->waiting);
|
196 |
196 |
#endif
|
197 |
|
@@ -190,7 +246,11 @@ thread_t *chThdCreateSuspendedI(const thread_descriptor_t *tdp) {
|
|
197 |
@@ -190,7 +244,11 @@ thread_t *chThdCreateSuspendedI(const thread_descriptor_t *tdp) {
|
198 |
198 |
PORT_SETUP_CONTEXT(tp, tdp->wbase, tp, tdp->funcp, tdp->arg);
|
199 |
199 |
|
200 |
200 |
/* The driver object is initialized but not started.*/
|
... | ... | |
206 |
206 |
}
|
207 |
207 |
|
208 |
208 |
/**
|
209 |
|
@@ -300,6 +360,7 @@ thread_t *chThdCreate(const thread_descriptor_t *tdp) {
|
|
209 |
@@ -300,6 +358,7 @@ thread_t *chThdCreate(const thread_descriptor_t *tdp) {
|
210 |
210 |
return tp;
|
211 |
211 |
}
|
212 |
212 |
|
... | ... | |
214 |
214 |
/**
|
215 |
215 |
* @brief Creates a new thread into a static memory area.
|
216 |
216 |
* @post The created thread has a reference counter set to one, it is
|
217 |
|
@@ -315,13 +376,20 @@ thread_t *chThdCreate(const thread_descriptor_t *tdp) {
|
|
217 |
@@ -315,13 +374,20 @@ thread_t *chThdCreate(const thread_descriptor_t *tdp) {
|
218 |
218 |
* @param[in] pf the thread function
|
219 |
219 |
* @param[in] arg an argument passed to the thread function. It can be
|
220 |
220 |
* @p NULL.
|
... | ... | |
235 |
235 |
thread_t *tp;
|
236 |
236 |
|
237 |
237 |
chDbgCheck((wsp != NULL) &&
|
238 |
|
@@ -358,7 +426,11 @@ thread_t *chThdCreateStatic(void *wsp, size_t size,
|
|
238 |
@@ -358,7 +424,11 @@ thread_t *chThdCreateStatic(void *wsp, size_t size,
|
239 |
239 |
/* Setting up the port-dependent part of the working area.*/
|
240 |
240 |
PORT_SETUP_CONTEXT(tp, wsp, tp, pf, arg);
|
241 |
241 |
|
... | ... | |
247 |
247 |
|
248 |
248 |
/* Starting the thread immediately.*/
|
249 |
249 |
chSchWakeupS(tp, MSG_OK);
|
250 |
|
@@ -529,6 +601,30 @@ void chThdExitS(msg_t msg) {
|
|
250 |
@@ -529,6 +599,30 @@ void chThdExitS(msg_t msg) {
|
251 |
251 |
#endif
|
252 |
252 |
#endif
|
253 |
253 |
|
... | ... | |
278 |
278 |
/* Going into final state.*/
|
279 |
279 |
chSchGoSleepS(CH_STATE_FINAL);
|
280 |
280 |
|
281 |
|
@@ -610,6 +706,43 @@ tprio_t chThdSetPriority(tprio_t newprio) {
|
|
281 |
@@ -610,6 +704,43 @@ tprio_t chThdSetPriority(tprio_t newprio) {
|
282 |
282 |
#else
|
283 |
283 |
oldprio = currp->prio;
|
284 |
284 |
currp->prio = newprio;
|
... | ... | |
451 |
451 |
test_wait_threads();
|
452 |
452 |
test_assert_sequence("ABCDE", "invalid sequence");
|
453 |
453 |
}
|
454 |
|
@@ -325,6 +339,405 @@ static const testcase_t rt_test_003_004 = {
|
|
454 |
@@ -325,6 +339,408 @@ static const testcase_t rt_test_003_004 = {
|
455 |
455 |
};
|
456 |
456 |
#endif /* CH_CFG_USE_MUTEXES */
|
457 |
457 |
|
... | ... | |
511 |
511 |
+ siblings[2] = threads[2]->sibling;
|
512 |
512 |
+ siblings[3] = threads[3]->sibling;
|
513 |
513 |
+ siblings[4] = threads[4]->sibling;
|
514 |
|
+ chThdTerminate(threads[0]);
|
515 |
|
+ chThdTerminate(threads[1]);
|
516 |
|
+ chThdTerminate(threads[2]);
|
517 |
|
+ chThdTerminate(threads[3]);
|
518 |
|
+ chThdTerminate(threads[4]);
|
|
514 |
+ test_terminate_threads();
|
519 |
515 |
+ test_wait_threads();
|
520 |
516 |
+ test_assert(parents[0] == chThdGetSelfX() &&
|
521 |
517 |
+ parents[1] == threads_cpy[0] &&
|
... | ... | |
660 |
656 |
+ threads_cpy[2] = threads[2];
|
661 |
657 |
+ threads_cpy[3] = threads[3];
|
662 |
658 |
+ threads_cpy[4] = threads[4];
|
|
659 |
+#if CH_CFG_USE_REGISTRY == TRUE
|
|
660 |
+ chThdAddRef(threads[1]);
|
|
661 |
+ chThdAddRef(threads[4]);
|
|
662 |
+#endif
|
663 |
663 |
+ chThdTerminate(threads[1]);
|
664 |
664 |
+ chThdTerminate(threads[4]);
|
665 |
665 |
+ chThdWait(threads[1]);
|
... | ... | |
707 |
707 |
+ threads_cpy[2] = threads[2];
|
708 |
708 |
+ threads_cpy[3] = threads[3];
|
709 |
709 |
+ threads_cpy[4] = threads[4];
|
|
710 |
+#if CH_CFG_USE_REGISTRY == TRUE
|
|
711 |
+ chThdAddRef(threads[0]);
|
|
712 |
+#endif
|
710 |
713 |
+ chThdTerminate(threads[0]);
|
711 |
714 |
+ chThdWait(threads[0]);
|
712 |
715 |
+ parents[0] = threads_cpy[0]->parent;
|
... | ... | |
857 |
860 |
/****************************************************************************
|
858 |
861 |
* Exported data.
|
859 |
862 |
****************************************************************************/
|
860 |
|
@@ -338,6 +751,9 @@ const testcase_t * const rt_test_sequence_003_array[] = {
|
|
863 |
@@ -338,6 +754,9 @@ const testcase_t * const rt_test_sequence_003_array[] = {
|
861 |
864 |
&rt_test_003_003,
|
862 |
865 |
#if (CH_CFG_USE_MUTEXES) || defined(__DOXYGEN__)
|
863 |
866 |
&rt_test_003_004,
|
... | ... | |
1215 |
1218 |
}
|
1216 |
1219 |
|
1217 |
1220 |
/* [10.8.2] Waiting one second then terminating the 5 threads.*/
|
|
1221 |
--
|
|
1222 |
2.17.1
|
|
1223 |
|