From 9c2246fd274b886a231656f93b477355e351c9a6 Mon Sep 17 00:00:00 2001 From: "liu.l.y" Date: Sat, 7 Jun 2025 17:36:00 +0800 Subject: [PATCH 1/3] fix: rs274 nullptr will collapse the milltask when hal para is unexpected. --- src/emc/rs274ngc/gcodemodule.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/emc/rs274ngc/gcodemodule.cc b/src/emc/rs274ngc/gcodemodule.cc index cc2790c8165..8af1577470b 100644 --- a/src/emc/rs274ngc/gcodemodule.cc +++ b/src/emc/rs274ngc/gcodemodule.cc @@ -193,10 +193,11 @@ static InterpBase *pinterp; #define callmethod(o, m, f, ...) PyObject_CallMethod((o), (char*)(m), (char*)(f), ## __VA_ARGS__) -static void maybe_new_line(int sequence_number=pinterp->sequence_number()); +static void maybe_new_line(int sequence_number=0); static void maybe_new_line(int sequence_number) { if(!pinterp) return; if(interp_error) return; + sequence_number=pinterp->sequence_number(); if(sequence_number == last_sequence_number) return; LineCode *new_line_code = From 1dbe608cda2b49faccf42d43b8ca2aa733ac3d8a Mon Sep 17 00:00:00 2001 From: liuly Date: Tue, 17 Jun 2025 17:11:33 +0800 Subject: [PATCH 2/3] Modify for alter the code's operation, keep it as same as before. --- src/emc/rs274ngc/gcodemodule.cc | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/emc/rs274ngc/gcodemodule.cc b/src/emc/rs274ngc/gcodemodule.cc index 8af1577470b..0826629d89f 100644 --- a/src/emc/rs274ngc/gcodemodule.cc +++ b/src/emc/rs274ngc/gcodemodule.cc @@ -193,11 +193,32 @@ static InterpBase *pinterp; #define callmethod(o, m, f, ...) PyObject_CallMethod((o), (char*)(m), (char*)(f), ## __VA_ARGS__) -static void maybe_new_line(int sequence_number=0); +static void maybe_new_line(); +static void maybe_new_line(int sequence_number); + +static void maybe_new_line() { + if(!pinterp) return; + if(interp_error) return; + int sequence_number = pinterp->sequence_number(); + if(sequence_number == last_sequence_number) + return; + LineCode *new_line_code = + (LineCode*)(PyObject_New(LineCode, &LineCodeType)); + pinterp->active_settings(new_line_code->settings); + pinterp->active_g_codes(new_line_code->gcodes); + pinterp->active_m_codes(new_line_code->mcodes); + new_line_code->gcodes[0] = sequence_number; + last_sequence_number = sequence_number; + PyObject *result = + callmethod(callback, "next_line", "O", new_line_code); + Py_DECREF(new_line_code); + if(result == NULL) interp_error ++; + Py_XDECREF(result); +} + static void maybe_new_line(int sequence_number) { if(!pinterp) return; if(interp_error) return; - sequence_number=pinterp->sequence_number(); if(sequence_number == last_sequence_number) return; LineCode *new_line_code = From 8af488592f953cad6c70ea3731f8fb3ce70378d4 Mon Sep 17 00:00:00 2001 From: liuly Date: Tue, 17 Jun 2025 17:52:28 +0800 Subject: [PATCH 3/3] Remove code duplication in maybe_new_line by using function delegation. --- src/emc/rs274ngc/gcodemodule.cc | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/emc/rs274ngc/gcodemodule.cc b/src/emc/rs274ngc/gcodemodule.cc index 0826629d89f..58176dc938a 100644 --- a/src/emc/rs274ngc/gcodemodule.cc +++ b/src/emc/rs274ngc/gcodemodule.cc @@ -193,13 +193,12 @@ static InterpBase *pinterp; #define callmethod(o, m, f, ...) PyObject_CallMethod((o), (char*)(m), (char*)(f), ## __VA_ARGS__) -static void maybe_new_line(); static void maybe_new_line(int sequence_number); +static void maybe_new_line(); -static void maybe_new_line() { +static void maybe_new_line(int sequence_number) { if(!pinterp) return; if(interp_error) return; - int sequence_number = pinterp->sequence_number(); if(sequence_number == last_sequence_number) return; LineCode *new_line_code = @@ -216,23 +215,9 @@ static void maybe_new_line() { Py_XDECREF(result); } -static void maybe_new_line(int sequence_number) { +static void maybe_new_line() { if(!pinterp) return; - if(interp_error) return; - if(sequence_number == last_sequence_number) - return; - LineCode *new_line_code = - (LineCode*)(PyObject_New(LineCode, &LineCodeType)); - pinterp->active_settings(new_line_code->settings); - pinterp->active_g_codes(new_line_code->gcodes); - pinterp->active_m_codes(new_line_code->mcodes); - new_line_code->gcodes[0] = sequence_number; - last_sequence_number = sequence_number; - PyObject *result = - callmethod(callback, "next_line", "O", new_line_code); - Py_DECREF(new_line_code); - if(result == NULL) interp_error ++; - Py_XDECREF(result); + maybe_new_line(pinterp->sequence_number()); } //das ist für die Vorschau