diff --git a/git-teaspeak b/git-teaspeak index 5f28af1..309dfed 160000 --- a/git-teaspeak +++ b/git-teaspeak @@ -1 +1 @@ -Subproject commit 5f28af18dabd2ee8f3370bf564c1e287acad3af2 +Subproject commit 309dfed173cdcc46e10d2ec6a1683ff79895539b diff --git a/server/src/client/voice/VoiceClientConnection.cpp b/server/src/client/voice/VoiceClientConnection.cpp index 7e40e80..eccab12 100644 --- a/server/src/client/voice/VoiceClientConnection.cpp +++ b/server/src/client/voice/VoiceClientConnection.cpp @@ -252,7 +252,7 @@ void VoiceClientConnection::execute_handle_command_packets(const std::chrono::sy buffer_execute_lock.unlock(); auto voice_server = this->client->voice_server; - if(voice_server && reexecute_handle) + if(voice_server && (reexecute_handle || this->should_reassembled_reschedule)) this->client->voice_server->schedule_command_handling(this->client); } @@ -267,13 +267,19 @@ bool VoiceClientConnection::next_reassembled_command(unique_lock_command_fragment_buffers) { - unique_lock ring_lock(buf.buffer_lock/*, try_to_lock */); //Perm lock the buffer else, may command wount get handeled. Because we've more left, but say we waven't - if(!ring_lock.owns_lock()) continue; + unique_lock ring_lock(buf.buffer_lock, try_to_lock); //Perm lock the buffer else, may command wount get handeled. Because we've more left, but say we waven't + if(!ring_lock.owns_lock()) { + this->should_reassembled_reschedule = true; + continue; + } if(buf.front_set()) { if(!buffer) { /* lets still test for reexecute */ buffer_execute_lock = unique_lock(buf.execute_lock, try_to_lock); - if(!buffer_execute_lock.owns_lock()) continue; + if(!buffer_execute_lock.owns_lock()) { + this->should_reassembled_reschedule = true; + continue; + } buffer_lock = move(ring_lock); buffer = &buf; @@ -368,6 +374,7 @@ bool VoiceClientConnection::next_reassembled_command(unique_lock &buffer_execute_lock /* packet channel execute lock */, pipes::buffer & /* buffer*/, uint16_t& /* packet id */);