From 6d384cd75c96171a0fd1d08eca7c260c83aa3f55 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 14 Jun 2021 14:55:45 +0200 Subject: [PATCH] [cpp] Copy EventQueueEntry instead of taking pointer to reallocatable instance. Closes #1827. --- .../spine-cpp/src/spine/AnimationState.cpp | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index 33d6dc35f..a82dac424 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -265,23 +265,23 @@ void EventQueue::drain() { // Don't cache _eventQueueEntries.size() so callbacks can queue their own events (eg, call setAnimation in AnimationState_Complete). for (size_t i = 0; i < _eventQueueEntries.size(); ++i) { - EventQueueEntry *queueEntry = &_eventQueueEntries[i]; - TrackEntry *trackEntry = queueEntry->_entry; + EventQueueEntry queueEntry = _eventQueueEntries[i]; + TrackEntry *trackEntry = queueEntry._entry; - switch (queueEntry->_type) { + switch (queueEntry._type) { case EventType_Start: case EventType_Interrupt: case EventType_Complete: - if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL); - else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL); - if (!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, NULL); - else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL); + if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry._type, trackEntry, NULL); + else trackEntry->_listenerObject->callback(&state, queueEntry._type, trackEntry, NULL); + if (!state._listenerObject) state._listener(&state, queueEntry._type, trackEntry, NULL); + else state._listenerObject->callback(&state, queueEntry._type, trackEntry, NULL); break; case EventType_End: - if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry->_type, trackEntry, NULL); - else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL); - if (!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, NULL); - else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, NULL); + if (!trackEntry->_listenerObject) trackEntry->_listener(&state, queueEntry._type, trackEntry, NULL); + else trackEntry->_listenerObject->callback(&state, queueEntry._type, trackEntry, NULL); + if (!state._listenerObject) state._listener(&state, queueEntry._type, trackEntry, NULL); + else state._listenerObject->callback(&state, queueEntry._type, trackEntry, NULL); /* Fall through. */ case EventType_Dispose: if (!trackEntry->_listenerObject) trackEntry->_listener(&state, EventType_Dispose, trackEntry, NULL); @@ -294,10 +294,10 @@ void EventQueue::drain() { break; case EventType_Event: if (!trackEntry->_listenerObject) - trackEntry->_listener(&state, queueEntry->_type, trackEntry, queueEntry->_event); - else trackEntry->_listenerObject->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event); - if (!state._listenerObject) state._listener(&state, queueEntry->_type, trackEntry, queueEntry->_event); - else state._listenerObject->callback(&state, queueEntry->_type, trackEntry, queueEntry->_event); + trackEntry->_listener(&state, queueEntry._type, trackEntry, queueEntry._event); + else trackEntry->_listenerObject->callback(&state, queueEntry._type, trackEntry, queueEntry._event); + if (!state._listenerObject) state._listener(&state, queueEntry._type, trackEntry, queueEntry._event); + else state._listenerObject->callback(&state, queueEntry._type, trackEntry, queueEntry._event); break; } }