mirror of
https://github.com/synthetos/g2.git
synced 2026-09-21 18:56:31 +08:00
Fixed $$ lockup problem. Root cause was mis-handling of stale NV lists.
This commit is contained in:
@@ -1117,7 +1117,7 @@ static stat_t _do_outputs(nvObj_t *nv) // print parameters for all output group
|
||||
}
|
||||
return (STAT_COMPLETE);
|
||||
}
|
||||
/*
|
||||
|
||||
static stat_t _do_heaters(nvObj_t *nv) // print parameters for all heater groups
|
||||
{
|
||||
char group[GROUP_LEN];
|
||||
@@ -1127,7 +1127,7 @@ static stat_t _do_heaters(nvObj_t *nv) // print parameters for all heater group
|
||||
}
|
||||
return (STAT_COMPLETE);
|
||||
}
|
||||
*/
|
||||
|
||||
static stat_t _do_all(nvObj_t *nv) // print all parameters
|
||||
{
|
||||
_do_group(nv, (char *)"sys"); // System group
|
||||
@@ -1135,10 +1135,10 @@ static stat_t _do_all(nvObj_t *nv) // print all parameters
|
||||
_do_axes(nv);
|
||||
_do_inputs(nv);
|
||||
_do_outputs(nv);
|
||||
// _do_heaters(nv); // there are no text mode prints for heaters
|
||||
_do_heaters(nv); // there are no text mode prints for heaters
|
||||
_do_group(nv, (char *)"p1"); // PWM group
|
||||
_do_offsets(nv); // coordinate system offsets
|
||||
return (STAT_OK);
|
||||
return (STAT_COMPLETE); // STAT_COMPLETE suppresses a second JSON write that would cause a fault
|
||||
}
|
||||
|
||||
/***********************************************************************************
|
||||
|
||||
+1
-1
@@ -204,7 +204,7 @@ char *get_status_message(stat_t status);
|
||||
#define STAT_MAX_DEPTH_EXCEEDED 115 // JSON exceeded maximum nesting depth
|
||||
#define STAT_VALUE_TYPE_ERROR 116 // JSON value does not agree with variable type
|
||||
|
||||
#define STAT_INPUT_FROM_MUTED_CHANNEL_ERROR 117 // input from a muted channel was ignored
|
||||
#define STAT_INPUT_FROM_MUTED_CHANNEL_ERROR 117 // input from a muted channel was ignored
|
||||
#define STAT_ERROR_118 118
|
||||
#define STAT_ERROR_119 119
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<ProjectVersion>7.0</ProjectVersion>
|
||||
<ToolchainName>com.Atmel.ARMGCC.CPP</ToolchainName>
|
||||
<ProjectGuid>{44ea8fec-55d7-4149-8a78-a574fc26bf51}</ProjectGuid>
|
||||
<avrdevice>ATSAMS70N19</avrdevice>
|
||||
<avrdevice>ATSAM3X8C</avrdevice>
|
||||
<avrdeviceseries>none</avrdeviceseries>
|
||||
<OutputType>Executable</OutputType>
|
||||
<Language>CPP</Language>
|
||||
@@ -68,12 +68,12 @@
|
||||
<com_atmel_avrdbg_tool_atmelice>
|
||||
<ToolOptions>
|
||||
<InterfaceProperties>
|
||||
<SwdClock>2000000</SwdClock>
|
||||
<SwdClock>10000000</SwdClock>
|
||||
</InterfaceProperties>
|
||||
<InterfaceName>SWD</InterfaceName>
|
||||
</ToolOptions>
|
||||
<ToolType>com.atmel.avrdbg.tool.atmelice</ToolType>
|
||||
<ToolNumber>J41800019454</ToolNumber>
|
||||
<ToolNumber>J41800036434</ToolNumber>
|
||||
<ToolName>Atmel-ICE</ToolName>
|
||||
</com_atmel_avrdbg_tool_atmelice>
|
||||
<UseGdb>True</UseGdb>
|
||||
@@ -100,9 +100,9 @@
|
||||
<HWProgramCounterSampling>True</HWProgramCounterSampling>
|
||||
</PercepioTrace>
|
||||
<preserveEEPROM>true</preserveEEPROM>
|
||||
<avrtoolserialnumber>J41800019454</avrtoolserialnumber>
|
||||
<avrdeviceexpectedsignature>0xA11D0A00</avrdeviceexpectedsignature>
|
||||
<avrtoolinterfaceclock>2000000</avrtoolinterfaceclock>
|
||||
<avrtoolserialnumber>J41800036434</avrtoolserialnumber>
|
||||
<avrdeviceexpectedsignature>0x284E0A60</avrdeviceexpectedsignature>
|
||||
<avrtoolinterfaceclock>10000000</avrtoolinterfaceclock>
|
||||
<custom>
|
||||
<ToolOptions xmlns="">
|
||||
<InterfaceProperties>
|
||||
|
||||
Executable → Regular
+5
-2
@@ -568,10 +568,13 @@ void json_print_response(uint8_t status, const bool only_to_muted /*= false*/)
|
||||
nv->valuetype = TYPE_EMPTY;
|
||||
}
|
||||
}
|
||||
} while ((nv = nv->nx) != NULL);
|
||||
} while ((nv = nv->nx) != NULL); // Emergency escape
|
||||
}
|
||||
|
||||
// Footer processing
|
||||
// Footer processing - wind to the end of the populated blocks
|
||||
if (nv == NULL) { // this can happen when processing a stale list
|
||||
return; //...that already has a null-terminated footer
|
||||
}
|
||||
while(nv->valuetype != TYPE_EMPTY) { // find a free nvObj at end of the list...
|
||||
if ((nv = nv->nx) == NULL) { // oops! No free nvObj!
|
||||
rpt_exception(STAT_JSON_OUTPUT_TOO_LONG, "json_print_response() json too long"); // report this as an exception
|
||||
|
||||
Reference in New Issue
Block a user