mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-02-19 23:46:02 +01:00
Fix memory leak - only track vpin once
This commit is contained in:
parent
0029762fc6
commit
fe24671ad2
@ -233,7 +233,20 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isConfigured(VPIN vpin) const {
|
||||||
|
ConfiguredInput *current = _firstInput;
|
||||||
|
while (current != nullptr) {
|
||||||
|
if (current->getVpin() == vpin) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
current = current->getNext();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void addConfiguredInput(ConfiguredInput *input) {
|
void addConfiguredInput(ConfiguredInput *input) {
|
||||||
|
VPIN vpin = input->getVpin();
|
||||||
|
if (isConfigured(vpin)) return; // Already have this captured, don't create it again
|
||||||
if (!_firstInput) {
|
if (!_firstInput) {
|
||||||
_firstInput = input;
|
_firstInput = input;
|
||||||
} else {
|
} else {
|
||||||
@ -259,7 +272,7 @@ private:
|
|||||||
outBuffer, sizeof(outBuffer));
|
outBuffer, sizeof(outBuffer));
|
||||||
if (status == I2C_STATUS_OK) {
|
if (status == I2C_STATUS_OK) {
|
||||||
if (responseBuffer[0] == EXIORDY) {
|
if (responseBuffer[0] == EXIORDY) {
|
||||||
addConfiguredInput (new ConfiguredInput(vpin, configType, pullup));
|
addConfiguredInput(new ConfiguredInput(vpin, configType, pullup));
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
DIAG(F("EXIOVpin %u cannot be used as a digital input pin"), (int)vpin);
|
DIAG(F("EXIOVpin %u cannot be used as a digital input pin"), (int)vpin);
|
||||||
|
Loading…
Reference in New Issue
Block a user