mojoAL icon indicating copy to clipboard operation
mojoAL copied to clipboard

On Xcode, enabling Thread Sanitizer when running testposition breaks when moving either blue or green squares

Open ericoporto opened this issue 1 year ago • 0 comments

In Xcode, you can enable a Thread Sanitizer by selecting it in Scheme->Edit Scheme, for the testposition running option. I created the Xcode project by using it's generator from CMake. I am using the prebuilt SDL2 framework from SDL releases.

image

I am using the CantinaBand60.wav file for testing.

testposition(2557,0x1ecc67ac0) malloc: nano zone abandoned due to inability to reserve vm space.
AddInstanceForFactory: No factory registered for id <CFUUID 0x10484e8c0> F8BB1C28-BAE8-11D6-9C31-00039315CD46
Now queueing '/Users/user/git/mojoAL-1/cmake-build-debugxcode/CantinaBand60.wav'...
==================
WARNING: ThreadSanitizer: data race (pid=2557)
  Read of size 1 at 0x00010a91005c by thread T5 (mutexes: write M0, write M1):
    #0 mix_source(ALCcontext_struct*, ALsource*, float*, int, char) <null> (libmojoal.dylib:arm64+0x3440c)
    #1 mix_context(ALCcontext_struct*, float*, int) <null> (libmojoal.dylib:arm64+0x3249c)
    #2 playback_device_callback(void*, unsigned char*, int) <null> (libmojoal.dylib:arm64+0x31f9c)
    #3 <null> <null> (SDL2:arm64+0x34128)

  Previous write of size 1 at 0x00010a91005c by main thread (mutexes: write M2):
    #0 _alSourcefv(unsigned int, int, float const*) <null> (libmojoal.dylib:arm64+0x2110c)
    #1 _alSource3f(unsigned int, int, float, float, float) <null> (libmojoal.dylib:arm64+0x214b8)
    #2 alSource3f <null> (libmojoal.dylib:arm64+0x213e0)
    #3 mainloop(SDL_Renderer*) <null> (testposition:arm64+0x1000062e4)
    #4 spatialize(SDL_Renderer*, char const*) <null> (testposition:arm64+0x100004868)
    #5 main <null> (testposition:arm64+0x100003a14)

  Location is heap block of size 15400 at 0x00010a910000 allocated by main thread:
    #0 calloc <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x55c8c)
    #1 SDL_DYNAPI_entry <null> (SDL2:arm64+0xd75e0)
    #2 _alGenSources(int, unsigned int*) <null> (libmojoal.dylib:arm64+0x1d008)
    #3 alGenSources <null> (libmojoal.dylib:arm64+0x1bd60)
    #4 spatialize(SDL_Renderer*, char const*) <null> (testposition:arm64+0x100003c98)
    #5 main <null> (testposition:arm64+0x100003a14)

  Mutex M0 (0x00010465c6c0) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
    #1 SDL_DYNAPI_entry <null> (SDL2:arm64+0xe2f64)
    #2 alcCreateContext <null> (libmojoal.dylib:arm64+0x6738)
    #3 main <null> (testposition:arm64+0x1000036ac)

  Mutex M1 (0x00010465c380) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
    #1 SDL_DYNAPI_entry <null> (SDL2:arm64+0xe2f64)
    #2 alcCreateContext <null> (libmojoal.dylib:arm64+0x6738)
    #3 main <null> (testposition:arm64+0x1000036ac)

  Mutex M2 (0x00010465f2c0) created at:
    #0 pthread_mutex_init <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
    #1 SDL_DYNAPI_entry <null> (SDL2:arm64+0xe2f64)
    #2 prep_alc_device(char const*, char) <null> (libmojoal.dylib:arm64+0x5048)
    #3 alcOpenDevice <null> (libmojoal.dylib:arm64+0x4f80)
    #4 main <null> (testposition:arm64+0x1000035a0)

  Thread T5 (tid=34370, running) created by main thread at:
    #0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x2ffec)
    #1 <null> <null> (SDL2:arm64+0x24fe4)
    #2 alcCreateContext <null> (libmojoal.dylib:arm64+0x6738)
    #3 main <null> (testposition:arm64+0x1000036ac)

SUMMARY: ThreadSanitizer: data race (/Users/user/git/mojoAL-1/cmake-build-debugxcode/Debug/libmojoal.dylib:arm64+0x3440c) in mix_source(ALCcontext_struct*, ALsource*, float*, int, char)+0x2ac

Anyhow it reports a read of size 1 here

https://github.com/icculus/mojoAL/blob/1adfdf5cd5447c68e11b0ab9f74318a4e364e7c9/mojoal.c#L1939

While there is a write of size 1 here

https://github.com/icculus/mojoAL/blob/1adfdf5cd5447c68e11b0ab9f74318a4e364e7c9/mojoal.c#L3734

This appears fine.

I don't know how much of a real issue this is as the test appears to work correctly. Still decided to report just in case.

ericoporto avatar Mar 09 '24 13:03 ericoporto