Opened 3 years ago

Closed 3 years ago

Last modified 12 months ago

#9609 closed defect (fixed)

SDL: Crash with displayMessageOnOSD called from separate thread in cloud code

Reported by: criezy Owned by: criezy
Priority: normal Component: --Other--
Keywords: Cc:
Game:

Description

I got the crash with the current code in master (0a186a66) on OS X with SDL2.

In the cloud code displayMessageOnOSD is called from a separate thread. This means it can be called while a GFX transaction is on-going, if for example the user toggles fullscreen on/off at the same time. The same issue existed with the cloud icon pulsing and was fixed in commit 1a1a5b5 by bgK. For the OSD Message it is a bit more difficult to reproduce as you need to time the graphics change with the moment when the message is shown. The callstack for the crash I got is:

Thread 7 Crashed:: SDLTimer
0   __pthread_kill + 10
1   pthread_kill + 92
2   abort + 125
3   __assert_rtn + 321
4   SurfaceSdlGraphicsManager::displayMessageOnOSD(char const*) + 130 (surfacesdl-graphics.cpp:2088)
5   ModularBackend::displayMessageOnOSD(char const*) + 54 (modular-backend.cpp:242)
6   Cloud::Storage::savesSyncDefaultCallback(Networking::Response<bool>) + 215 (storage.cpp:211)
7   Common::Callback<Cloud::Storage, Networking::Response<bool> >::operator()(Networking::Response<bool>) + 143 (callback.h:90)
8   Cloud::SavesSyncRequest::finishSync(bool) + 220 (savessyncrequest.cpp:400)
9   Cloud::SavesSyncRequest::uploadNextFile() + 91 (savessyncrequest.cpp:287)
10 Cloud::SavesSyncRequest::downloadNextFile() + 255 (savessyncrequest.cpp:234)
11  Cloud::SavesSyncRequest::directoryListedCallback(Networking::Response<Common::Array<Cloud::StorageFile>&>) + 1895 (savessyncrequest.cpp:140)
12  Common::Callback<Cloud::SavesSyncRequest, Networking::Response<Common::Array<Cloud::StorageFile>&> >::operator()(Networking::Response<Common::Array<Cloud::StorageFile>&>) + 142 (callback.h:90)
13  Cloud::Dropbox::DropboxListDirectoryRequest::finishListing(Common::Array<Cloud::StorageFile>&) + 118 (dropboxlistdirectoryrequest.cpp:220)
14  Cloud::Dropbox::DropboxListDirectoryRequest::responseCallback(Networking::Response<Common::JSONValue*>) + 5003 (dropboxlistdirectoryrequest.cpp:198)
15 Common::Callback<Cloud::Dropbox::DropboxListDirectoryRequest, Networking::Response<Common::JSONValue*> >::operator()(Networking::Response<Common::JSONValue*>) + 142 (callback.h:90)
16  Networking::CurlJsonRequest::finishJson(Common::JSONValue*) + 124 (curljsonrequest.cpp:99)
17  Networking::CurlJsonRequest::handle() + 393 (curljsonrequest.cpp:78)
18  Networking::ConnectionManager::interateRequests() + 336 (connectionmanager.cpp:155)
19  Networking::ConnectionManager::handle() + 86 (connectionmanager.cpp:132)
20  Networking::connectionsThread(void*) + 25 (connectionmanager.cpp:101)
21  DefaultTimerManager::handler() + 482 (default-timer.cpp:108)
22  timer_handler(unsigned int, void*) + 27 (sdl-timer.cpp:34)
23  SDL_TimerThread + 399 (SDL_timer.c:169)
24  SDL_RunThread + 60 (SDL_thread.c:282)
25  RunThread + 9 (SDL_systhread.c:75)
26  _pthread_body + 138
27  _pthread_start + 137
28  thread_start + 13

This triggers the following assert:

Assertion failed: (_transactionMode == kTransactionNone), function displayMessageOnOSD, file backends/graphics/surfacesdl/surfacesdl-graphics.cpp, line 2088.

Change History (2)

comment:1 by criezy, 3 years ago

Owner: set to criezy
Resolution: fixed
Status: newclosed

The issue was fixed with Pull Request 855 that was merged on October 29.

comment:2 by digitall, 12 months ago

Component: --Unset----Other--
Note: See TracTickets for help on using tickets.