Do not delete message before delivering packet #1081
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
WHAT is this pull request doing?
The build_packet method constructs an
MQTT::Publish
packet using the message data stored inenv.message
.If the message has already been deleted (via
delete_message(sp)
), theenv.message
reference becomes invalid, leading to a segmentation fault when accessed.This PR also fixes a bug where the
@consumers.empty?
never got triggered because thedeliver_loop
didn't yield in time for theread_loop
to take over and set theclient=nil
, so thedeliver_loop
would continue to loop errors.Now we set
client=nil
when thedeliver_loop
experiences an error, so theconsumers.empty?
channel triggers and the loop waits for a new client connection.HOW can this pull request be tested?
run
lavinmqperf mqtt throughput
via themqtt-perf
branch and make sure there are no segment faults.