From e2b5e4b5d1cd3d95a4585347a81e6f293c3ec02e Mon Sep 17 00:00:00 2001 From: Paul Dino Jones Date: Wed, 26 Mar 2025 12:35:16 -0400 Subject: [PATCH] Fix leak in arduino lua --- src/monocoque/devices/serial/arduino.c | 10 ++++------ src/monocoque/devices/serialdevice.c | 8 +++++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/monocoque/devices/serial/arduino.c b/src/monocoque/devices/serial/arduino.c index bf43e40..6555872 100644 --- a/src/monocoque/devices/serial/arduino.c +++ b/src/monocoque/devices/serial/arduino.c @@ -115,6 +115,8 @@ int arduino_customled_init(SerialDevice* serialdevice, const char* portdev, cons /* If something went wrong, error message is at the top of */ /* the stack */ fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1)); + lua_close(serialdevice->m.L); + return -1; exit(1); } lua_setglobal(L,"myFunc"); @@ -328,13 +330,9 @@ int arduino_customled_free(SerialDevice* serialdevice, bool lua) } size_t size = sizeof(bytes); - // temporary hack to help it shut off - sleep(1); int result = monocoque_serial_write_block(serialdevice->id, &bytes, size, arduino_timeout); - if(lua == true) - { - lua_close(serialdevice->m.L); - } + lua_close(serialdevice->m.L); + return result; } diff --git a/src/monocoque/devices/serialdevice.c b/src/monocoque/devices/serialdevice.c index 14521c2..c900a68 100644 --- a/src/monocoque/devices/serialdevice.c +++ b/src/monocoque/devices/serialdevice.c @@ -174,6 +174,7 @@ int serialdev_free(SimDevice* this) break; case ARDUINODEV__SIMLED__CUSTOM: arduino_customled_free(serialdevice, true); + free(serialdevice->m.device_specific_config_file); break; case ARDUINODEV__SIMLED: arduino_customled_free(serialdevice, false); @@ -217,7 +218,12 @@ int serialdev_init(SerialDevice* serialdevice, DeviceSettings* ds) error = moza_init(serialdevice, ds->serialdevsettings.portdev); break; case ARDUINODEV__SIMLED__CUSTOM: - error = arduino_customled_init(serialdevice, ds->serialdevsettings.portdev, ds->specific_config_file); + serialdevice->m.device_specific_config_file = strdup(ds->specific_config_file); + error = arduino_customled_init(serialdevice, ds->serialdevsettings.portdev, serialdevice->m.device_specific_config_file); + if(error < 0) + { + free(serialdevice->m.device_specific_config_file); + } break; case ARDUINODEV__SIMLED: error = arduino_customled_init(serialdevice, ds->serialdevsettings.portdev, NULL);