Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [threadx-users] [help] Question about _tx_byte_allocate / _tx_byte_release behavior in ThreadX 6.1.1
  • From: <Itsuki.Kanno@xxxxxxxxxxxx>
  • Date: Fri, 5 Dec 2025 00:10:39 +0000
  • Accept-language: ja-JP, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yokogawa.com; dmarc=pass action=none header.from=yokogawa.com; dkim=pass header.d=yokogawa.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gRVozAaSetAKVXmWKRWyoxLL8g4yxz3qSHzp3ZUewV0=; b=EsT3JtI7nQMSfChOdVIj0nSBWHfrfg9xj+lBVZrfmIEOvYMEwYlh0zdYWIDhsumogj+uiarL1zb2U8js09fmhmgBInVsNsgHy1g4ALUCQYuUN5tdwLP8LsN3f2YR6ImkhBPl1dz/pm7DM1cwZu+1qXNFBpyPdyV9tZtbPAC/R+mJmhunBlXRjqb0lzsxaa3oZx+s1FVYqkhSkdYr6zMolp4E7prN0Or1zk0zKypTv0N30xt7nbJ5DaMYBeivIgmaOFgh/zl6n43Avi4XrE8dLzoTVaGikEoP5MYPVinMqnAVWT+QoJ5HdN+4dZPcKzCT82M/mql0ya+zxOVfUAdgwg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bOdAGqwERvnxi1OPUYVNLcldvzcu79Mf6bfcIRIaADSPGxO96hkM0gi97G805jr7FfWimJQrwIElksnzSKAWMElEyenM4NgwJxFeGPoqnUggns4l0t3PAEqE/oyes9IN4bSXYEHpYG/CUYvmgojNjXQ2t0MmHOUn3YKJDlPJE5VLX/WkeMw5eWwLgAlFpqetNC5xLmcl9J62fVSsxE6loRK6JwUBiL5XeHG96IC1kd1xf2uSGVI2V2ec6hSQ9/uK9Zo3x6LSxGz/mLfGzHo6ZO57r2yyiNQsu+dueGt/506lryL9S5NdL0CHtihMT3jBwkpwx5uBD6SN7fk9tm2S8A==
  • Delivered-to: threadx-users@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/threadx-users/>
  • List-help: <mailto:threadx-users-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/threadx-users>, <mailto:threadx-users-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/threadx-users>, <mailto:threadx-users-request@eclipse.org?subject=unsubscribe>
  • Msip_labels: MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_Enabled=True; MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_SiteId=0da2a83b-13d9-4a35-965f-ec53a220ed9d; MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_SetDate=2025-12-05T00:10:39.526Z; MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_Name=Public; MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_ContentBits=1; MSIP_Label_277a80f2-c852-488e-92a6-9c3bbdc34d5f_Method=Standard;
  • Thread-index: AQHcZPEJ6c0CD4QFKEejTQ9oIyzWeLURwSKggABsCj0=
  • Thread-topic: [help] Question about _tx_byte_allocate / _tx_byte_release behavior in ThreadX 6.1.1

Dear Bill,


Thank you very much for your helpful response.

First, I need to correct my previous statement:
It should have been **“before `_tx_byte_release`, the reverse pointer in the block header is unexpectedly set to `TX_BYTE_BLOCK_FREE`, even though the block was not freed yet.”**
I apologize for the confusion.

In our application, we have confirmed that `_tx_byte_release` is never called twice on the same pointer before reallocation. The unexpected change occurs between `_tx_byte_allocate` and `_tx_byte_release`. This is why we are trying to understand whether this could still be an application-level issue or something else.

My assumption was that `_tx_byte_allocate` and `_tx_byte_release` are designed to be thread-safe, so if the application uses these APIs correctly, thread safety should be guaranteed. Is this assumption incorrect? Are there any specific precautions we should take when multiple tasks share a single byte pool?

Regarding the `memory` option in the `TX_DISABLE` macro:
Our current implementation does not include `memory` option. I plan to try adding it as you suggested. However, since the issue occurs very rarely in our environment and we are working under SIL(IEC 61508) certification, any modification to ThreadX macros requires a clear theoretical justification.
If you could share why adding `memory` option resolves the issue and under what conditions the problem could occur without it, that would be extremely helpful.

Your advice would help us ensure compliance and robustness under functional safety requirements.

Thank you again for your support.


Best regards,
KANNO, Itsuki

________________________________________
差出人: Bill Lamie <blamie@xxxxxxxxxxx>
送信日時: 2025年12月5日 2:57
宛先: ThreadX end-user questions
CC: Kanno, Itsuki (Itsuki.Kanno@xxxxxxxxxxxx); threadx-users-request@xxxxxxxxxxx
件名: RE: [help] Question about _tx_byte_allocate / _tx_byte_release behavior in ThreadX 6.1.1

blamie@xxxxxxxxxxx からメールを受け取る頻度は高くありません。これが重要である理由<https://aka.ms/LearnAboutSenderIdentification>

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

Hi Itsuki-san,

After a call to tx_byte_release, the reverse pointer should be TX_BYTE_BLOCK_FREE. If you are saying that you see this happen before tx_byte_release is called, that feels like an application problem where an allocated block might be used after it was released and rereleased.

Since you are not using optimization, I don’t believe it is related to that. However, you can apply the same fix to rule that out, e.g., make sure your TX_DISABLE macro in tx_port.h uses the “memory” option in the in-line assembly, e.g.:

#define TX_DISABLE                              asm volatile (" MRS %0,CPSR; CPSID if ": "=r" (interrupt_save) : "memory");

I still think the issue might be related to either using or rereleasing an already freed pointer…

I hope that helps!

Best regards,

Bill

From: threadx-users <threadx-users-bounces@xxxxxxxxxxx> On Behalf Of Itsuki.Kanno--- via threadx-users
Sent: Thursday, December 4, 2025 2:04 AM
To: threadx-users@xxxxxxxxxxx
Cc: Itsuki.Kanno@xxxxxxxxxxxx; threadx-users-request@xxxxxxxxxxx
Subject: [threadx-users] [help] Question about _tx_byte_allocate / _tx_byte_release behavior in ThreadX 6.1.1

Dear ThreadX community,


I am working with ThreadX version 6.1.1 on TI AM2431 (Cortex-R5 core only), using Arm Compiler for Embedded FuSa 6.16.2 with optimization level -O0.

We have a single static global byte pool shared by multiple tasks. Occasionally, under heavy load, we observe inconsistent pool information when using `_tx_byte_allocate` and `_tx_byte_release`.

Specifically:
- After a successful `_tx_byte_allocate`, the header of the allocated block appears correct.
- However, after `_tx_byte_release`, the reverse pointer in the block header is unexpectedly set to `TX_BYTE_BLOCK_FREE`, even though the block was not freed yet.
- Additionally, the "next block" pointer inside the same block sometimes changes to an old value from a previous allocation.
- This issue seems to occur right after `_tx_byte_pool_search` performs a block split during allocation.

My concern is whether this behavior could be related to GitHub Issue #334, which mentions pool corruption under `-O3` or `-O2` optimization. In our case, we are using `-O0`, so the conditions differ.

Could you please advise if this is a known issue in ThreadX 6.1.1 or if it is likely caused by our application code?

Thank you for your support.

Best regards,
KANNO, Itsuki
Yokogawa Electric Corp.
Yokogawa Products HQ Sensing Center Development Div.
Analyzer Development Dep. Software Sec. Gr.1
Email: Itsuki.Kanno@xxxxxxxxxxxx<mailto:Itsuki.Kanno@xxxxxxxxxxxx>
TEL: +81-70-1005-8039
M22-3, 9-32, Nakacho 2-chome, Musashino-shi, Tokyo 180-8750, Japan
-----
CONFIDENTIAL: This e-mail may contain information that is confidential or otherwise protected from disclosure and intended only for the party to whom it is addressed. If you are not the intended recipient, please notify the sender by return and delete this e-mail. You are hereby formally advised that any unauthorized use, disclosure or copying of this email is strictly prohibited and may be unlawful.


Back to the top