Use a standard mutex for the event callback lock

This commit is contained in:
Chris Robinson
2018-11-20 10:55:57 -08:00
parent 191ea90de3
commit f9e969a339
5 changed files with 9 additions and 9 deletions
-2
View File
@@ -2539,7 +2539,6 @@ static ALvoid InitContext(ALCcontext *Context)
Context->SpeedOfSound = SPEEDOFSOUNDMETRESPERSEC;
Context->MetersPerUnit = AL_DEFAULT_METERS_PER_UNIT;
alsem_init(&Context->EventSem, 0);
almtx_init(&Context->EventCbLock, almtx_plain);
Context->ExtensionList = alExtList;
@@ -2650,7 +2649,6 @@ ALCcontext_struct::~ALCcontext_struct()
}
TRACE("Freed " SZFMT " listener property object%s\n", count, (count==1)?"":"s");
almtx_destroy(&EventCbLock);
alsem_destroy(&EventSem);
ll_ringbuffer_free(AsyncEvents);
+3 -1
View File
@@ -1,6 +1,8 @@
#ifndef ALCONTEXT_H
#define ALCONTEXT_H
#include <mutex>
#include <atomic>
#include <memory>
#include <thread>
@@ -102,7 +104,7 @@ struct ALCcontext_struct {
alsem_t EventSem;
ll_ringbuffer *AsyncEvents{nullptr};
ATOMIC(ALbitfieldSOFT) EnabledEvts{0u};
almtx_t EventCbLock;
std::mutex EventCbLock;
ALEVENTPROCSOFT EventCb{};
void *EventParam{nullptr};
+1 -1
View File
@@ -73,7 +73,7 @@ void alSetError(ALCcontext *context, ALenum errorCode, const char *msg, ...)
context->LastError.compare_exchange_strong(curerr, errorCode);
if((context->EnabledEvts.load(std::memory_order_relaxed)&EventType_Error))
{
std::lock_guard<almtx_t> _{context->EventCbLock};
std::lock_guard<std::mutex> _{context->EventCbLock};
ALbitfieldSOFT enabledevts{context->EnabledEvts.load(std::memory_order_relaxed)};
if((enabledevts&EventType_Error) && context->EventCb)
(*context->EventCb)(AL_EVENT_TYPE_ERROR_SOFT, 0, errorCode, msglen, msg,
+2 -2
View File
@@ -664,8 +664,8 @@ AL_API ALvoid AL_APIENTRY alDopplerVelocity(ALfloat value)
static constexpr ALCchar msg[] =
"alDopplerVelocity is deprecated in AL1.1, use alSpeedOfSound";
const ALsizei msglen = (ALsizei)strlen(msg);
std::lock_guard<almtx_t> _{context->EventCbLock};
ALbitfieldSOFT enabledevts{ATOMIC_LOAD(&context->EnabledEvts, almemory_order_relaxed)};
std::lock_guard<std::mutex> _{context->EventCbLock};
ALbitfieldSOFT enabledevts{context->EnabledEvts.load(std::memory_order_relaxed)};
if((enabledevts&EventType_Deprecated) && context->EventCb)
(*context->EventCb)(AL_EVENT_TYPE_DEPRECATED_SOFT, 0, 0, msglen, msg,
context->EventParam);
+3 -3
View File
@@ -27,7 +27,7 @@ static int EventThread(ALCcontext *context)
continue;
}
std::lock_guard<almtx_t> _{context->EventCbLock};
std::lock_guard<std::mutex> _{context->EventCbLock};
do {
quitnow = evt.EnumType == EventType_KillThread;
if(UNLIKELY(quitnow)) break;
@@ -126,7 +126,7 @@ AL_API void AL_APIENTRY alEventControlSOFT(ALsizei count, const ALenum *types, A
/* Wait to ensure the event handler sees the changed flags before
* returning.
*/
std::lock_guard<almtx_t>{context->EventCbLock};
std::lock_guard<std::mutex>{context->EventCbLock};
}
}
@@ -136,7 +136,7 @@ AL_API void AL_APIENTRY alEventCallbackSOFT(ALEVENTPROCSOFT callback, void *user
if(UNLIKELY(!context)) return;
std::lock_guard<almtx_t> _{context->PropLock};
std::lock_guard<almtx_t> __{context->EventCbLock};
std::lock_guard<std::mutex> __{context->EventCbLock};
context->EventCb = callback;
context->EventParam = userParam;
}