Re: TSan error with boost::interprocess::message_queue on macOS ARM

Ion Gaztañaga via Boost-users <[email protected]>
Newsgroups gmane.comp.lib.boost.user
Message-ID <[email protected]>
On 09/08/2022 23:35, vl01--- via Boost-users wrote:
> Hello List,
> 
> I'm using the boost::interprocess::message_queue in a project and to
> verify everything is working I created a test case. In that test case
> I'm sending and receiving data via threads.
> 
> The test passes on Linux, Windows with no sanitizer and also with
> AddressSanitizer and ThreadSanitizer. I recently added Apple Silicon
> (M1) to the test matrix and now the test run with ThreadSanitizer
> enabled fails.
> 
> Is boost::interprocess::message_queue thread-safe?
> Can the reported TSan error be an false-positive?
> If it that case, what test can I run to verify that?
> 
> I looked at code of atomic_cas32() and it uses the legacy built-in 
> __sync_val_compare_and_swap().
> Can it be that that built-in isn't supported on ARM?
> Is there a newer built-in which should be used?

It could be. Can you test if __atomic_compare_exchange avoids the TSAN 
error?

inline boost::uint32_t atomic_cas32
    ( volatile boost::uint32_t *mem
    , boost::uint32_t with, boost::uint32_t cmp)
{
    __atomic_compare_exchange
      (const_cast<boost::uint32_t*>(mem), &cmp, &with, false
      ,__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
    return cmp;
}

Best,

Ion
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.