Use global placement new for AsyncEvent

This commit is contained in:
Chris Robinson
2020-04-24 07:04:32 -07:00
parent f49238c792
commit be476c7935
4 changed files with 10 additions and 6 deletions
+1 -1
View File
@@ -122,7 +122,7 @@ void StopEventThrd(ALCcontext *ctx)
evt_data = ring->getWriteVector().first;
} while(evt_data.len == 0);
}
new (evt_data.buf) AsyncEvent{EventType_KillThread};
::new(evt_data.buf) AsyncEvent{EventType_KillThread};
ring->writeAdvance(1);
ctx->mEventSem.post();
+4
View File
@@ -4,6 +4,8 @@
#include "AL/al.h"
#include "AL/alc.h"
#include "almalloc.h"
struct EffectState;
@@ -46,6 +48,8 @@ struct AsyncEvent {
AsyncEvent() noexcept = default;
constexpr AsyncEvent(unsigned int type) noexcept : EnumType{type} { }
DISABLE_ALLOC()
};
+3 -3
View File
@@ -480,7 +480,7 @@ bool CalcEffectSlotParams(ALeffectslot *slot, ALeffectslot **sorted_slots, ALCco
auto evt_vec = ring->getWriteVector();
if LIKELY(evt_vec.first.len > 0)
{
AsyncEvent *evt{new (evt_vec.first.buf) AsyncEvent{EventType_ReleaseEffectState}};
AsyncEvent *evt{::new(evt_vec.first.buf) AsyncEvent{EventType_ReleaseEffectState}};
evt->u.mEffectState = oldstate;
ring->writeAdvance(1);
}
@@ -1589,7 +1589,7 @@ void SendSourceStateEvent(ALCcontext *context, ALuint id, ALenum state)
auto evt_vec = ring->getWriteVector();
if(evt_vec.first.len < 1) return;
AsyncEvent *evt{new (evt_vec.first.buf) AsyncEvent{EventType_SourceStateChange}};
AsyncEvent *evt{::new(evt_vec.first.buf) AsyncEvent{EventType_SourceStateChange}};
evt->u.srcstate.id = id;
evt->u.srcstate.state = state;
@@ -2119,7 +2119,7 @@ void aluHandleDisconnect(ALCdevice *device, const char *msg, ...)
auto evt_data = ring->getWriteVector().first;
if(evt_data.len > 0)
{
::new (evt_data.buf) AsyncEvent{evt};
::new(evt_data.buf) AsyncEvent{evt};
ring->writeAdvance(1);
ctx->mEventSem.post();
}
+2 -2
View File
@@ -301,7 +301,7 @@ void SendSourceStoppedEvent(ALCcontext *context, ALuint id)
auto evt_vec = ring->getWriteVector();
if(evt_vec.first.len < 1) return;
AsyncEvent *evt{new (evt_vec.first.buf) AsyncEvent{EventType_SourceStateChange}};
AsyncEvent *evt{::new(evt_vec.first.buf) AsyncEvent{EventType_SourceStateChange}};
evt->u.srcstate.id = id;
evt->u.srcstate.state = AL_STOPPED;
@@ -906,7 +906,7 @@ void Voice::mix(const State vstate, ALCcontext *Context, const ALuint SamplesToD
auto evt_vec = ring->getWriteVector();
if(evt_vec.first.len > 0)
{
AsyncEvent *evt{new (evt_vec.first.buf) AsyncEvent{EventType_BufferCompleted}};
AsyncEvent *evt{::new(evt_vec.first.buf) AsyncEvent{EventType_BufferCompleted}};
evt->u.bufcomp.id = SourceID;
evt->u.bufcomp.count = buffers_done;
ring->writeAdvance(1);