From c6a4160def4d56d6669f6384b8286fef4f330f7e Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Fri, 31 May 2019 22:36:09 +0100 Subject: [PATCH] Fix incoming/outgoing quota problems for QoS>0. --- ChangeLog.txt | 1 + src/database.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 9f2f71ea..1e17d3d2 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -28,6 +28,7 @@ Broker: - Fix MQTT v5 overlapping subscription behaviour. Clients now receive message from all matching subscriptions rather than the first one encountered, which ensures the maximum QoS requirement is met. +- Fix incoming/outgoing quota problems for QoS>0. Client library: - Fix typo causing build error on Windows when building without TLS support. diff --git a/src/database.c b/src/database.c index 482e210f..87daf68c 100644 --- a/src/database.c +++ b/src/database.c @@ -291,6 +291,9 @@ void db__message_dequeue_first(struct mosquitto *context, struct mosquitto_msg_d msg = msg_data->queued; DL_DELETE(msg_data->queued, msg); DL_APPEND(msg_data->inflight, msg); + if(msg_data->inflight_quota > 0){ + msg_data->inflight_quota--; + } } @@ -757,9 +760,7 @@ int db__message_reconnect_reset_outgoing(struct mosquitto_db *db, struct mosquit if(msg->qos > 0){ context->msgs_out.msg_count12++; context->msgs_out.msg_bytes12 += msg->store->payloadlen; - if(context->msgs_out.inflight_quota > 0){ - context->msgs_out.inflight_quota--; - } + util__decrement_receive_quota(context); } switch(msg->qos){ @@ -828,9 +829,7 @@ int db__message_reconnect_reset_incoming(struct mosquitto_db *db, struct mosquit if(msg->qos > 0){ context->msgs_in.msg_count12++; context->msgs_in.msg_bytes12 += msg->store->payloadlen; - if(context->msgs_in.inflight_quota > 0){ - context->msgs_in.inflight_quota--; - } + util__decrement_receive_quota(context); } if(msg->qos != 2){ @@ -1107,7 +1106,7 @@ int db__message_write(struct mosquitto_db *db, struct mosquitto *context) } DL_FOREACH_SAFE(context->msgs_in.queued, tail, tmp){ - if(context->msgs_out.inflight_maximum != 0 && msg_count >= context->msgs_out.inflight_maximum){ + if(context->msgs_out.inflight_maximum != 0 && context->msgs_in.inflight_quota == 0){ break; } @@ -1126,7 +1125,7 @@ int db__message_write(struct mosquitto_db *db, struct mosquitto *context) } DL_FOREACH_SAFE(context->msgs_out.queued, tail, tmp){ - if(context->msgs_out.inflight_maximum != 0 && msg_count >= context->msgs_out.inflight_maximum){ + if(context->msgs_out.inflight_maximum != 0 && context->msgs_out.inflight_quota == 0){ break; }