Skip to content

Commit

Permalink
linux: fix issues if certain codepaths are hit while signal handlers …
Browse files Browse the repository at this point in the history
…are temporarily off.
  • Loading branch information
slime73 committed Apr 16, 2022
1 parent e512eff commit b3b1317
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 24 deletions.
38 changes: 18 additions & 20 deletions src/modules/audio/openal/Audio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,6 @@ Audio::Audio()
, poolThread(nullptr)
, distanceModel(DISTANCE_INVERSE_CLAMPED)
{
#if defined(LOVE_LINUX)
// Temporarly block signals, as the thread inherits this mask
love::thread::disableSignals();
#endif

// Before opening new device, check if recording
// is requested.
if (getRequestRecordingPermission())
Expand All @@ -114,29 +109,32 @@ Audio::Audio()
requestRecordingPermission();
}

// Passing null for default device.
device = alcOpenDevice(nullptr);
{
#if defined(LOVE_LINUX)
// Temporarly block signals, as the thread inherits this mask
love::thread::ScopedDisableSignals disableSignals;
#endif

if (device == nullptr)
throw love::Exception("Could not open device.");
// Passing null for default device.
device = alcOpenDevice(nullptr);

if (device == nullptr)
throw love::Exception("Could not open device.");

#ifdef ALC_EXT_EFX
ALint attribs[4] = { ALC_MAX_AUXILIARY_SENDS, MAX_SOURCE_EFFECTS, 0, 0 };
ALint attribs[4] = { ALC_MAX_AUXILIARY_SENDS, MAX_SOURCE_EFFECTS, 0, 0 };
#else
ALint *attribs = nullptr;
ALint *attribs = nullptr;
#endif

context = alcCreateContext(device, attribs);

if (context == nullptr)
throw love::Exception("Could not create context.");
context = alcCreateContext(device, attribs);

if (!alcMakeContextCurrent(context) || alcGetError(device) != ALC_NO_ERROR)
throw love::Exception("Could not make context current.");
if (context == nullptr)
throw love::Exception("Could not create context.");

#if defined(LOVE_LINUX)
love::thread::reenableSignals();
#endif
if (!alcMakeContextCurrent(context) || alcGetError(device) != ALC_NO_ERROR)
throw love::Exception("Could not make context current.");
}

#ifdef ALC_EXT_EFX
initializeEFX();
Expand Down
5 changes: 1 addition & 4 deletions src/modules/thread/sdl/Thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ bool Thread::start()
{
#if defined(LOVE_LINUX)
// Temporarly block signals, as the thread inherits this mask
love::thread::disableSignals();
love::thread::ScopedDisableSignals disableSignals;
#endif

Lock l(mutex);
Expand All @@ -55,9 +55,6 @@ bool Thread::start()
thread = SDL_CreateThread(thread_runner, t->getThreadName(), this);
running = (thread != nullptr);

#if defined(LOVE_LINUX)
love::thread::reenableSignals();
#endif
return running;
}

Expand Down
6 changes: 6 additions & 0 deletions src/modules/thread/threads.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ Thread *newThread(Threadable *t);
#if defined(LOVE_LINUX)
void disableSignals();
void reenableSignals();

struct ScopedDisableSignals
{
ScopedDisableSignals() { disableSignals(); }
~ScopedDisableSignals() { reenableSignals(); }
};
#endif

} // thread
Expand Down

0 comments on commit b3b1317

Please sign in to comment.