Don't check for space in the ringbuffer before trying to write
The write method already checks and returns how much it managed to fit in.
This commit is contained in:
parent
945d74cbc9
commit
179e1c4dbc
@ -2749,9 +2749,8 @@ static void FreeContext(ALCcontext *context)
|
||||
if(ATOMIC_EXCHANGE(&context->EnabledEvts, 0, almemory_order_acq_rel))
|
||||
{
|
||||
static const AsyncEvent kill_evt = { 0 };
|
||||
while(ll_ringbuffer_write_space(context->AsyncEvents) == 0)
|
||||
while(ll_ringbuffer_write(context->AsyncEvents, (const char*)&kill_evt, 1) == 0)
|
||||
althrd_yield();
|
||||
ll_ringbuffer_write(context->AsyncEvents, (const char*)&kill_evt, 1);
|
||||
alsem_post(&context->EventSem);
|
||||
althrd_join(context->EventThread, NULL);
|
||||
}
|
||||
|
11
Alc/ALu.c
11
Alc/ALu.c
@ -238,9 +238,8 @@ static void SendSourceStoppedEvent(ALCcontext *context, ALuint id)
|
||||
}
|
||||
strcpy(evt.Message+strpos, " state changed to AL_STOPPED");
|
||||
|
||||
if(ll_ringbuffer_write_space(context->AsyncEvents) > 0)
|
||||
ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1);
|
||||
alsem_post(&context->EventSem);
|
||||
if(ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1) == 1)
|
||||
alsem_post(&context->EventSem);
|
||||
}
|
||||
|
||||
|
||||
@ -1942,11 +1941,9 @@ void aluHandleDisconnect(ALCdevice *device, const char *msg, ...)
|
||||
ALbitfieldSOFT enabledevt = ATOMIC_LOAD(&ctx->EnabledEvts, almemory_order_acquire);
|
||||
ALsizei i;
|
||||
|
||||
if((enabledevt&EventType_Disconnected) && ll_ringbuffer_write_space(ctx->AsyncEvents) > 0)
|
||||
{
|
||||
ll_ringbuffer_write(ctx->AsyncEvents, (const char*)&evt, 1);
|
||||
if((enabledevt&EventType_Disconnected) &&
|
||||
ll_ringbuffer_write(ctx->AsyncEvents, (const char*)&evt, 1) == 1)
|
||||
alsem_post(&ctx->EventSem);
|
||||
}
|
||||
|
||||
for(i = 0;i < ctx->VoiceCount;i++)
|
||||
{
|
||||
|
@ -203,8 +203,8 @@ static void SendAsyncEvent(ALCcontext *context, ALuint enumtype, ALenum type,
|
||||
evt.ObjectId = objid;
|
||||
evt.Param = param;
|
||||
strcpy(evt.Message, msg);
|
||||
if(ll_ringbuffer_write_space(context->AsyncEvents) > 0)
|
||||
ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1);
|
||||
if(ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1) == 1)
|
||||
alsem_post(&context->EventSem);
|
||||
}
|
||||
|
||||
|
||||
@ -773,12 +773,9 @@ ALboolean MixSource(ALvoice *voice, ALuint SourceID, ALCcontext *Context, ALsize
|
||||
/* Send any events now, after the position/buffer info was updated. */
|
||||
enabledevt = ATOMIC_LOAD(&Context->EnabledEvts, almemory_order_acquire);
|
||||
if(buffers_done > 0 && (enabledevt&EventType_BufferCompleted))
|
||||
{
|
||||
SendAsyncEvent(Context, EventType_BufferCompleted,
|
||||
AL_EVENT_TYPE_BUFFER_COMPLETED_SOFT, SourceID, buffers_done, "Buffer completed"
|
||||
);
|
||||
alsem_post(&Context->EventSem);
|
||||
}
|
||||
|
||||
return isplaying;
|
||||
}
|
||||
|
@ -248,9 +248,8 @@ static void SendStateChangeEvent(ALCcontext *context, ALuint id, ALenum state)
|
||||
* and we don't want state change messages to occur out of order, so send
|
||||
* it through the async queue to ensure proper ordering.
|
||||
*/
|
||||
if(ll_ringbuffer_write_space(context->AsyncEvents) > 0)
|
||||
ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1);
|
||||
alsem_post(&context->EventSem);
|
||||
if(ll_ringbuffer_write(context->AsyncEvents, (const char*)&evt, 1) == 1)
|
||||
alsem_post(&context->EventSem);
|
||||
}
|
||||
|
||||
|
||||
|
@ -102,9 +102,8 @@ AL_API void AL_APIENTRY alEventControlSOFT(ALsizei count, const ALenum *types, A
|
||||
if(isrunning && !(enabledevts&~flags))
|
||||
{
|
||||
static const AsyncEvent kill_evt = { 0 };
|
||||
while(ll_ringbuffer_write_space(context->AsyncEvents) == 0)
|
||||
while(ll_ringbuffer_write(context->AsyncEvents, (const char*)&kill_evt, 1) == 0)
|
||||
althrd_yield();
|
||||
ll_ringbuffer_write(context->AsyncEvents, (const char*)&kill_evt, 1);
|
||||
alsem_post(&context->EventSem);
|
||||
althrd_join(context->EventThread, NULL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user