summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Libraries/LibTLS/Record.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/Libraries/LibTLS/Record.cpp b/Libraries/LibTLS/Record.cpp
index 423411cb73..1e43c0ceda 100644
--- a/Libraries/LibTLS/Record.cpp
+++ b/Libraries/LibTLS/Record.cpp
@@ -34,11 +34,22 @@ namespace TLS {
void TLSv12::write_packet(ByteBuffer& packet)
{
m_context.tls_buffer.append(packet.data(), packet.size());
- if (!m_has_scheduled_write_flush && m_context.connection_status > ConnectionStatus::Disconnected) {
+ if (m_context.connection_status > ConnectionStatus::Disconnected) {
+ if (!m_has_scheduled_write_flush) {
#ifdef TLS_DEBUG
- dbg() << "Scheduling write of " << m_context.tls_buffer.size();
+ dbg() << "Scheduling write of " << m_context.tls_buffer.size();
#endif
- deferred_invoke([this](auto&) { write_into_socket(); });
+ deferred_invoke([this](auto&) { write_into_socket(); });
+ m_has_scheduled_write_flush = true;
+ } else {
+ // multiple packet are available, let's flush some out
+#ifdef TLS_DEBUG
+ dbg() << "Flushing scheduled write of " << m_context.tls_buffer.size();
+#endif
+ write_into_socket();
+ // the deferred invoke is still in place
+ m_has_scheduled_write_flush = true;
+ }
}
}