summaryrefslogtreecommitdiff
path: root/common/src
diff options
context:
space:
mode:
authorFrédéric Desbiens <[email protected]>2026-06-08 10:01:32 +0200
committerGitHub <[email protected]>2026-06-08 10:01:32 +0200
commit87ab09cce305eb9cd4aacac4e8c62af72f665bff (patch)
treedd062ebbea5235d1921c64b396bf7e4ce79e9e15 /common/src
parent9ab0cf9683f832cdb48e2099533a5b06a3afcd64 (diff)
parent730b61874bc5cf40768987605ae5187fde0fa1e2 (diff)
Merge pull request #544 from eclipse-threadx/devv6.5.1.202602_rel
Merging changes for the v.6.5.1.202602 release
Diffstat (limited to 'common/src')
-rw-r--r--common/src/tx_initialize_high_level.c7
-rw-r--r--common/src/tx_initialize_kernel_enter.c4
-rw-r--r--common/src/tx_queue_cleanup.c13
-rw-r--r--common/src/tx_timer_initialize.c3
-rw-r--r--common/src/tx_trace_object_register.c4
-rw-r--r--common/src/tx_trace_object_unregister.c2
6 files changed, 27 insertions, 6 deletions
diff --git a/common/src/tx_initialize_high_level.c b/common/src/tx_initialize_high_level.c
index 77bc3ed7..6de5eed5 100644
--- a/common/src/tx_initialize_high_level.c
+++ b/common/src/tx_initialize_high_level.c
@@ -111,17 +111,22 @@ VOID _tx_initialize_high_level(VOID)
/* Initialize the event log, if enabled. */
TX_EL_INITIALIZE
+
/* Call the thread control initialization function. */
_tx_thread_initialize();
+
#ifndef TX_NO_TIMER
+
/* Call the timer control initialization function. */
_tx_timer_initialize();
+
#endif
#ifndef TX_DISABLE_REDUNDANT_CLEARING
+
/* Call the semaphore initialization function. */
_tx_semaphore_initialize();
@@ -139,6 +144,6 @@ VOID _tx_initialize_high_level(VOID)
/* Call the mutex initialization function. */
_tx_mutex_initialize();
+
#endif
}
-
diff --git a/common/src/tx_initialize_kernel_enter.c b/common/src/tx_initialize_kernel_enter.c
index 20dc3017..bbb07332 100644
--- a/common/src/tx_initialize_kernel_enter.c
+++ b/common/src/tx_initialize_kernel_enter.c
@@ -101,15 +101,18 @@ VOID _tx_initialize_kernel_enter(VOID)
/* Call any port specific preprocessing. */
TX_PORT_SPECIFIC_PRE_INITIALIZATION
+
/* Invoke the low-level initialization to handle all processor specific
initialization issues. */
_tx_initialize_low_level();
+
/* Invoke the high-level initialization to exercise all of the
ThreadX components and the application's initialization
function. */
_tx_initialize_high_level();
+
/* Call any port specific post-processing. */
TX_PORT_SPECIFIC_POST_INITIALIZATION
}
@@ -150,4 +153,3 @@ VOID _tx_initialize_kernel_enter(VOID)
TX_SAFETY_CRITICAL_EXCEPTION(__FILE__, __LINE__, 0);
#endif
}
-
diff --git a/common/src/tx_queue_cleanup.c b/common/src/tx_queue_cleanup.c
index 05a423b3..90607183 100644
--- a/common/src/tx_queue_cleanup.c
+++ b/common/src/tx_queue_cleanup.c
@@ -109,6 +109,19 @@ TX_THREAD *previous_thread;
{
#else
+ /* TX_NOT_INTERRUPTABLE path: the revalidation guards present in the
+ interruptable path above (cleanup pointer, suspension sequence, NULL
+ queue pointer, queue ID, and suspended count checks) are intentionally
+ omitted here. Those guards exist to handle the race window that opens
+ when the interruptable path calls TX_RESTORE before invoking cleanup,
+ allowing another context to service or abort the suspension in between.
+ In TX_NOT_INTERRUPTABLE mode the caller keeps interrupts disabled across
+ the entire cleanup call, so that race window never exists. Additionally,
+ every path that resumes a suspended thread (tx_queue_send, tx_queue_receive,
+ tx_queue_flush, tx_queue_delete) clears tx_thread_suspend_cleanup before
+ calling _tx_thread_system_ni_resume, making a double-cleanup impossible
+ under the NI serialisation guarantee. */
+
/* Setup pointer to queue control block. */
queue_ptr = TX_VOID_TO_QUEUE_POINTER_CONVERT(thread_ptr -> tx_thread_suspend_control_block);
#endif
diff --git a/common/src/tx_timer_initialize.c b/common/src/tx_timer_initialize.c
index 2172b4a6..210888a1 100644
--- a/common/src/tx_timer_initialize.c
+++ b/common/src/tx_timer_initialize.c
@@ -245,6 +245,7 @@ UINT status;
do
{
+
/* Create the system timer thread. */
status = _tx_thread_create(&_tx_timer_thread,
TX_CONST_CHAR_TO_CHAR_POINTER_CONVERT("System Timer Thread"),
@@ -253,6 +254,7 @@ UINT status;
_tx_timer_stack_start, _tx_timer_stack_size,
_tx_timer_priority, _tx_timer_priority, TX_NO_TIME_SLICE, TX_DONT_START);
+
#ifdef TX_SAFETY_CRITICAL
/* Check return from thread create - if an error is detected throw an exception. */
@@ -295,4 +297,3 @@ UINT status;
#endif
#endif
}
-
diff --git a/common/src/tx_trace_object_register.c b/common/src/tx_trace_object_register.c
index f7cd4a4a..741896a5 100644
--- a/common/src/tx_trace_object_register.c
+++ b/common/src/tx_trace_object_register.c
@@ -85,7 +85,7 @@ TX_TRACE_OBJECT_ENTRY *entry_ptr;
/* Trace buffer is enabled, proceed. */
/* Pickup the total entries. */
- entries = _tx_trace_total_registry_entries;
+ entries = (UINT) _tx_trace_total_registry_entries;
/* Determine if there are available entries in the registry. */
if (_tx_trace_available_registry_entries != ((ULONG) 0))
@@ -98,7 +98,7 @@ TX_TRACE_OBJECT_ENTRY *entry_ptr;
loop_break = TX_FALSE;
/* Loop to find available entry. */
- i = _tx_trace_registry_search_start;
+ i = (UINT) _tx_trace_registry_search_start;
do
{
diff --git a/common/src/tx_trace_object_unregister.c b/common/src/tx_trace_object_unregister.c
index 2166c973..5d0330a5 100644
--- a/common/src/tx_trace_object_unregister.c
+++ b/common/src/tx_trace_object_unregister.c
@@ -78,7 +78,7 @@ TX_TRACE_OBJECT_ENTRY *entry_ptr;
/* Registry is setup, proceed. */
/* Pickup the total entries. */
- entries = _tx_trace_total_registry_entries;
+ entries = (UINT) _tx_trace_total_registry_entries;
/* Loop to find available entry. */
for (i = ((ULONG) 0); i < entries; i++)