Use global placement new for AsyncEvent
This commit is contained in:
+1
-1
@@ -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,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
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user