Ticket #13953: tinsel-music-threadsanitizer.txt

File tinsel-music-threadsanitizer.txt, 11.8 KB (added by dwatteau, 17 months ago)

For what it's worth, ThreadSanitizer appears to find a data race in the same area... here's the log.

Line 
1==================
2WARNING: ThreadSanitizer: data race (pid=4512)
3 Write of size 8 at 0x7b900006e040 by main thread:
4 #0 MidiDriver_ADLIB::setTimerCallback(void*, void (*)(void*)) adlib.cpp:1671 (scummvm:x86_64+0x1003a383d)
5 #1 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:518 (scummvm:x86_64+0x100098abc)
6 #2 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:421 (scummvm:x86_64+0x100098b25)
7 #3 Tinsel::TinselEngine::run() tinsel.cpp:1011 (scummvm:x86_64+0x100126720)
8 #4 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) main.cpp:312 (scummvm:x86_64+0x1004cf475)
9 #5 scummvm_main main.cpp:613 (scummvm:x86_64+0x1004cd0d4)
10 #6 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
11
12 Previous read of size 8 at 0x7b900006e040 by thread T7 (mutexes: write M3486, write M3742):
13 #0 MidiDriver_ADLIB::onTimer() adlib.cpp:1636 (scummvm:x86_64+0x1003a250d)
14 #1 Common::Functor0Mem<void, MidiDriver_ADLIB>::operator()() const func.h:397 (scummvm:x86_64+0x1003a7e5a)
15 #2 OPL::EmulatedOPL::readBuffer(short*, int) fmopl.cpp:358 (scummvm:x86_64+0x1003bc349)
16 #3 non-virtual thunk to OPL::EmulatedOPL::readBuffer(short*, int) fmopl.cpp (scummvm:x86_64+0x1003bc405)
17 #4 Audio::CopyRateConverter<false, true, false>::flow(Audio::AudioStream&, short*, unsigned int, unsigned short, unsigned short) rate.cpp:336 (scummvm:x86_64+0x1003f54e6)
18 #5 Audio::Channel::mix(short*, unsigned int) mixer.cpp:655 (scummvm:x86_64+0x1003e351e)
19 #6 Audio::MixerImpl::mixCallback(unsigned char*, unsigned int) mixer.cpp:311 (scummvm:x86_64+0x1003e31e4)
20 #7 SdlMixerManager::callbackHandler(unsigned char*, int) sdl-mixer.cpp:191 (scummvm:x86_64+0x100491512)
21 #8 SdlMixerManager::sdlCallback(void*, unsigned char*, int) sdl-mixer.cpp:198 (scummvm:x86_64+0x100491430)
22 #9 outputCallback <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xe2c33)
23
24 As if synchronized via sleep:
25 #0 nanosleep <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2cb25)
26 #1 SDL_Delay_REAL <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xeb48e)
27 #2 virtual thunk to OSystem_SDL::delayMillis(unsigned int) sdl.cpp (scummvm:x86_64+0x1004a0214)
28 #3 MidiDriver::sendGMReset() mididrv.cpp:449 (scummvm:x86_64+0x1003bf790)
29 #4 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:516 (scummvm:x86_64+0x100098a73)
30 #5 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:421 (scummvm:x86_64+0x100098b25)
31 #6 Tinsel::TinselEngine::run() tinsel.cpp:1011 (scummvm:x86_64+0x100126720)
32 #7 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) main.cpp:312 (scummvm:x86_64+0x1004cf475)
33 #8 scummvm_main main.cpp:613 (scummvm:x86_64+0x1004cd0d4)
34 #9 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
35
36 Location is heap block of size 7248 at 0x7b900006e000 allocated by main thread:
37 #0 operator new(unsigned long) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x82fed)
38 #1 AdLibEmuMusicPlugin::createInstance(MidiDriver**, unsigned int) const adlib.cpp:2321 (scummvm:x86_64+0x1003a71fb)
39 #2 MidiDriver::createMidi(unsigned int) mididrv.cpp:392 (scummvm:x86_64+0x1003bf5b1)
40 #3 Audio::MidiPlayer::createDriver(int) midiplayer.cpp:64 (scummvm:x86_64+0x1003d5566)
41 #4 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:508 (scummvm:x86_64+0x1000989c0)
42 #5 Tinsel::MidiMusicPlayer::MidiMusicPlayer(Tinsel::TinselEngine*) music.cpp:421 (scummvm:x86_64+0x100098b25)
43 #6 Tinsel::TinselEngine::run() tinsel.cpp:1011 (scummvm:x86_64+0x100126720)
44 #7 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) main.cpp:312 (scummvm:x86_64+0x1004cf475)
45 #8 scummvm_main main.cpp:613 (scummvm:x86_64+0x1004cd0d4)
46 #9 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
47
48 Mutex M3486 (0x7b100005cf40) created at:
49 #0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2ee85)
50 #1 SDL_CreateMutex_REAL <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd5cab)
51 #2 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
52 #3 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
53 #4 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
54 #5 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
55 #6 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
56 #7 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
57
58 Mutex M3742 (0x7b100005d180) created at:
59 #0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2ee85)
60 #1 SDL_CreateMutex_REAL <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd5cab)
61 #2 SdlMutexInternal::SdlMutexInternal() sdl-mutex.cpp:34 (scummvm:x86_64+0x1004916e5)
62 #3 createSdlMutexInternal() sdl-mutex.cpp:45 (scummvm:x86_64+0x1004916a6)
63 #4 OSystem_SDL::createMutex() sdl.cpp:694 (scummvm:x86_64+0x1004a0011)
64 #5 virtual thunk to OSystem_SDL::createMutex() sdl.cpp (scummvm:x86_64+0x1004a0088)
65 #6 Common::Mutex::Mutex() mutex.cpp:30 (scummvm:x86_64+0x1005b510d)
66 #7 Common::Mutex::Mutex() mutex.cpp:28 (scummvm:x86_64+0x1005b5165)
67 #8 Audio::MixerImpl::MixerImpl(unsigned int, bool, unsigned int) mixer.cpp:180 (scummvm:x86_64+0x1003e2307)
68 #9 Audio::MixerImpl::MixerImpl(unsigned int, bool, unsigned int) mixer.cpp:180 (scummvm:x86_64+0x1003e2542)
69 #10 SdlMixerManager::init() sdl-mixer.cpp:110 (scummvm:x86_64+0x100490d49)
70 #11 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
71 #12 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
72 #13 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
73 #14 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
74 #15 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
75 #16 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
76
77 Thread T7 (tid=30705, running) created by main thread at:
78 #0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2dd7f)
79 #1 SDL_SYS_CreateThread <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd57ab)
80 #2 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
81 #3 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
82 #4 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
83 #5 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
84 #6 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
85 #7 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
86
87SUMMARY: ThreadSanitizer: data race adlib.cpp:1671 in MidiDriver_ADLIB::setTimerCallback(void*, void (*)(void*))
88
89==================
90WARNING: ThreadSanitizer: data race (pid=4512)
91 Read of size 1 at 0x7b240002d4a0 by thread T7 (mutexes: write M3486, write M3742):
92 #0 Tinsel::PCMMusicPlayer::endOfData() const music.h:150 (scummvm:x86_64+0x10009d44d)
93 #1 Audio::Channel::mix(short*, unsigned int) mixer.cpp:648 (scummvm:x86_64+0x1003e33a9)
94 #2 Audio::MixerImpl::mixCallback(unsigned char*, unsigned int) mixer.cpp:311 (scummvm:x86_64+0x1003e31e4)
95 #3 SdlMixerManager::callbackHandler(unsigned char*, int) sdl-mixer.cpp:191 (scummvm:x86_64+0x100491512)
96 #4 SdlMixerManager::sdlCallback(void*, unsigned char*, int) sdl-mixer.cpp:198 (scummvm:x86_64+0x100491430)
97 #5 outputCallback <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xe2c33)
98
99 Previous write of size 1 at 0x7b240002d4a0 by main thread (mutexes: write M929847156725435520):
100 #0 Tinsel::PCMMusicPlayer::stop() music.cpp:1138 (scummvm:x86_64+0x10009a194)
101 #1 Tinsel::PCMMusicPlayer::setMusicSceneDetails(unsigned int, unsigned int, char const*) music.cpp:844 (scummvm:x86_64+0x10009b63c)
102 #2 Tinsel::LoadScene(unsigned int, int) scene.cpp:319 (scummvm:x86_64+0x1000da382)
103 #3 Tinsel::StartNewScene(unsigned int, int) scene.cpp:470 (scummvm:x86_64+0x1000d9cdc)
104 #4 Tinsel::DoRestoreSceneFrame(Tinsel::SAVED_DATA*, int) savescn.cpp:349 (scummvm:x86_64+0x1000d5d70)
105 #5 Tinsel::IsRestoringScene() savescn.cpp:442 (scummvm:x86_64+0x1000d5b2b)
106 #6 Tinsel::ChangeScene(bool) tinsel.cpp:676 (scummvm:x86_64+0x1001242f8)
107 #7 Tinsel::TinselEngine::NextGameCycle() tinsel.cpp:1164 (scummvm:x86_64+0x100127a87)
108 #8 Tinsel::TinselEngine::run() tinsel.cpp:1115 (scummvm:x86_64+0x10012704d)
109 #9 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) main.cpp:312 (scummvm:x86_64+0x1004cf475)
110 #10 scummvm_main main.cpp:613 (scummvm:x86_64+0x1004cd0d4)
111 #11 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
112
113 Location is heap block of size 136 at 0x7b240002d480 allocated by main thread:
114 #0 operator new(unsigned long) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x82fed)
115 #1 Tinsel::TinselEngine::run() tinsel.cpp:1012 (scummvm:x86_64+0x100126752)
116 #2 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) main.cpp:312 (scummvm:x86_64+0x1004cf475)
117 #3 scummvm_main main.cpp:613 (scummvm:x86_64+0x1004cd0d4)
118 #4 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
119
120 Mutex M3486 (0x7b100005cf40) created at:
121 #0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2ee85)
122 #1 SDL_CreateMutex_REAL <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd5cab)
123 #2 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
124 #3 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
125 #4 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
126 #5 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
127 #6 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
128 #7 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
129
130 Mutex M3742 (0x7b100005d180) created at:
131 #0 pthread_mutex_init <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2ee85)
132 #1 SDL_CreateMutex_REAL <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd5cab)
133 #2 SdlMutexInternal::SdlMutexInternal() sdl-mutex.cpp:34 (scummvm:x86_64+0x1004916e5)
134 #3 createSdlMutexInternal() sdl-mutex.cpp:45 (scummvm:x86_64+0x1004916a6)
135 #4 OSystem_SDL::createMutex() sdl.cpp:694 (scummvm:x86_64+0x1004a0011)
136 #5 virtual thunk to OSystem_SDL::createMutex() sdl.cpp (scummvm:x86_64+0x1004a0088)
137 #6 Common::Mutex::Mutex() mutex.cpp:30 (scummvm:x86_64+0x1005b510d)
138 #7 Common::Mutex::Mutex() mutex.cpp:28 (scummvm:x86_64+0x1005b5165)
139 #8 Audio::MixerImpl::MixerImpl(unsigned int, bool, unsigned int) mixer.cpp:180 (scummvm:x86_64+0x1003e2307)
140 #9 Audio::MixerImpl::MixerImpl(unsigned int, bool, unsigned int) mixer.cpp:180 (scummvm:x86_64+0x1003e2542)
141 #10 SdlMixerManager::init() sdl-mixer.cpp:110 (scummvm:x86_64+0x100490d49)
142 #11 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
143 #12 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
144 #13 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
145 #14 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
146 #15 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
147 #16 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
148
149 Mutex M929847156725435520 is already destroyed.
150
151 Thread T7 (tid=30705, running) created by main thread at:
152 #0 pthread_create <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x2dd7f)
153 #1 SDL_SYS_CreateThread <null>:2 (libSDL2-2.0.0.dylib:x86_64+0xd57ab)
154 #2 OSystem_SDL::initBackend() sdl.cpp:284 (scummvm:x86_64+0x10049d673)
155 #3 OSystem_POSIX::initBackend() posix.cpp:92 (scummvm:x86_64+0x10049888e)
156 #4 OSystem_MacOSX::initBackend() macosx.cpp:121 (scummvm:x86_64+0x1004957b9)
157 #5 virtual thunk to OSystem_MacOSX::initBackend() macosx.cpp (scummvm:x86_64+0x100495842)
158 #6 scummvm_main main.cpp:495 (scummvm:x86_64+0x1004ccc69)
159 #7 main macosx-main.cpp:44 (scummvm:x86_64+0x1004940aa)
160
161SUMMARY: ThreadSanitizer: data race music.h:150 in Tinsel::PCMMusicPlayer::endOfData() const
162==================