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
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to