Skip to content

Commit

Permalink
Fix multi-serial CRC error crash (#21249)
Browse files Browse the repository at this point in the history
  • Loading branch information
rhapsodyv authored Mar 4, 2021
1 parent a0d3123 commit 101f09a
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Marlin/src/gcode/control/M999.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,5 @@ void GcodeSuite::M999() {

if (parser.boolval('S')) return;

queue.flush_and_request_resend();
queue.flush_and_request_resend(queue.ring_buffer.command_port());
}
5 changes: 2 additions & 3 deletions Marlin/src/gcode/queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,7 @@ void GCodeQueue::RingBuffer::ok_to_send() {
* Send a "Resend: nnn" message to the host to
* indicate that a command needs to be re-sent.
*/
void GCodeQueue::flush_and_request_resend() {
const serial_index_t serial_ind = ring_buffer.command_port();
void GCodeQueue::flush_and_request_resend(const serial_index_t serial_ind) {
#if HAS_MULTI_SERIAL
if (serial_ind < 0) return; // Never mind. Command came from SD or Flash Drive
PORT_REDIRECT(SERIAL_PORTMASK(serial_ind)); // Reply to the serial port that sent the command
Expand Down Expand Up @@ -306,7 +305,7 @@ void GCodeQueue::gcode_line_error(PGM_P const err, const serial_index_t serial_i
SERIAL_ERROR_START();
SERIAL_ECHOLNPAIR_P(err, serial_state[serial_ind].last_N);
while (read_serial(serial_ind) != -1) { /* nada */ } // Clear out the RX buffer. Why don't use flush here ?
flush_and_request_resend();
flush_and_request_resend(serial_ind);
serial_state[serial_ind].count = 0;
}

Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/gcode/queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ class GCodeQueue {
* Clear the serial line and request a resend of
* the next expected line number.
*/
static void flush_and_request_resend();
static void flush_and_request_resend(const serial_index_t serial_ind);

/**
* (Re)Set the current line number for the last received command
Expand Down

0 comments on commit 101f09a

Please sign in to comment.