[next] Fix memory leak in serial port detection

This commit is contained in:
Dmitry K
2026-07-07 01:30:36 +04:00
committed by Adam Honse
parent f5a8ecc3f4
commit 73cd84f43c
11 changed files with 30 additions and 45 deletions

View File

@@ -21,13 +21,13 @@
DetectedControllers DetectArcticControllers()
{
DetectedControllers detected_controllers;
std::vector<std::string *> ports;
std::vector<std::string> ports;
ports = find_usb_serial_port(CH341_VID, CH341_PID);
for(unsigned int device = 0; device < ports.size(); device++)
{
ArcticController *controller = new ArcticController(*ports[device]);
ArcticController *controller = new ArcticController(ports[device]);
if(controller->IsPresent())
{
@@ -38,8 +38,6 @@ DetectedControllers DetectArcticControllers()
{
delete controller;
}
delete ports[device];
}
return(detected_controllers);

View File

@@ -24,12 +24,12 @@
DetectedControllers DetectBlinkyTapeControllers()
{
DetectedControllers detected_controllers;
std::vector<std::string *> device_locations = find_usb_serial_port(BLINKINLABS_VID, BLINKYTAPE_PID);
std::vector<std::string> device_locations = find_usb_serial_port(BLINKINLABS_VID, BLINKYTAPE_PID);
for(unsigned int device_idx = 0; device_idx < device_locations.size(); device_idx++)
{
BlinkyTapeController* controller = new BlinkyTapeController();
controller->Initialize(*device_locations[device_idx]);
controller->Initialize(device_locations[device_idx]);
RGBController_BlinkyTape* rgb_controller = new RGBController_BlinkyTape(controller);

View File

@@ -21,14 +21,14 @@
DetectedControllers DetectDygmaRaiseControllers()
{
DetectedControllers detected_controllers;
std::vector<std::string *> ports = find_usb_serial_port(DYGMA_RAISE_VID, DYGMA_RAISE_PID);
std::vector<std::string> ports = find_usb_serial_port(DYGMA_RAISE_VID, DYGMA_RAISE_PID);
for(std::size_t i = 0; i < ports.size(); i++)
{
if(*ports[i] != "")
if(ports[i] != "")
{
DygmaRaiseController* controller = new DygmaRaiseController();
controller->Initialize((char *)ports[i]->c_str());
controller->Initialize((char *)ports[i].c_str());
RGBController_DygmaRaise* rgb_controller = new RGBController_DygmaRaise(controller);

View File

@@ -42,13 +42,13 @@ DetectedControllers DetectHYTEMousematControllers()
for(unsigned int device_id = 0; device_id < HYTE_MOUSEMAT_NUM_DEVICES; device_id++)
{
std::vector<std::string *> ports = find_usb_serial_port(hyte_mousemat_devices[device_id].vid, hyte_mousemat_devices[device_id].pid);
std::vector<std::string> ports = find_usb_serial_port(hyte_mousemat_devices[device_id].vid, hyte_mousemat_devices[device_id].pid);
for(unsigned int i = 0; i < ports.size(); i++)
{
if(*ports[i] != "")
if(ports[i] != "")
{
HYTEMousematController * controller = new HYTEMousematController((char *)ports[i]->c_str(), hyte_mousemat_devices[device_id].name);
HYTEMousematController * controller = new HYTEMousematController((char *)ports[i].c_str(), hyte_mousemat_devices[device_id].name);
RGBController_HYTEMousemat * rgb_controller = new RGBController_HYTEMousemat(controller);
detected_controllers.push_back(rgb_controller);

View File

@@ -38,13 +38,13 @@ DetectedControllers DetectHYTENexusControllers()
for(unsigned int device_id = 0; device_id < HYTE_NEXUS_NUM_DEVICES; device_id++)
{
std::vector<std::string *> ports = find_usb_serial_port(hyte_nexus_devices[device_id].vid, hyte_nexus_devices[device_id].pid);
std::vector<std::string> ports = find_usb_serial_port(hyte_nexus_devices[device_id].vid, hyte_nexus_devices[device_id].pid);
for(unsigned int i = 0; i < ports.size(); i++)
{
if(*ports[i] != "")
if(ports[i] != "")
{
HYTENexusController * controller = new HYTENexusController((char *)ports[i]->c_str(), hyte_nexus_devices[device_id].pid, hyte_nexus_devices[device_id].name);
HYTENexusController * controller = new HYTENexusController((char *)ports[i].c_str(), hyte_nexus_devices[device_id].pid, hyte_nexus_devices[device_id].name);
RGBController_HYTENexus * rgb_controller = new RGBController_HYTENexus(controller);
detected_controllers.push_back(rgb_controller);

View File

@@ -52,7 +52,7 @@ DetectedControllers DetectJGINYUEInternalUSBV2Controller(hid_device_info* info,c
if(dev)
{
serial_port *port = nullptr;
std::vector<std::string*> serial_ports = find_usb_serial_port(JGINYUE_VID_V2, JGINYUE_MOTHERBOARD_PID_V2);
std::vector<std::string> serial_ports = find_usb_serial_port(JGINYUE_VID_V2, JGINYUE_MOTHERBOARD_PID_V2);
if(serial_ports.size() == 0)
{
@@ -66,22 +66,14 @@ DetectedControllers DetectJGINYUEInternalUSBV2Controller(hid_device_info* info,c
if(serial_ports.size() >= 1)
{
port = new serial_port();
if(!port->serial_open(serial_ports[0]->c_str(), 115200))
if(!port->serial_open(serial_ports[0].c_str(), 115200))
{
LOG_WARNING("[JGINYUEInternalUSBV2ControllerDetect] Failed to open serial port %s - Direct mode will be unavailable. HID modes will still work.", serial_ports[0]->c_str());
LOG_WARNING("[JGINYUEInternalUSBV2ControllerDetect] Failed to open serial port %s - Direct mode will be unavailable. HID modes will still work.", serial_ports[0].c_str());
delete port;
port = nullptr;
}
}
/*---------------------------------------------*\
| Clean up serial port string vector |
\*---------------------------------------------*/
for(std::string* str_ptr : serial_ports)
{
delete str_ptr;
}
JGINYUEInternalUSBV2Controller * controller = new JGINYUEInternalUSBV2Controller(dev, info->path, port);
RGBController_JGINYUEInternalUSBV2 * rgb_controller = new RGBController_JGINYUEInternalUSBV2(controller);

View File

@@ -24,16 +24,16 @@
DetectedControllers DetectNZXTHuePlusControllers()
{
DetectedControllers detected_controllers;
std::vector<std::string *> ports;
std::vector<std::string> ports;
ports = find_usb_serial_port(NZXT_HUE_PLUS_VID, NZXT_HUE_PLUS_PID);
for(std::size_t i = 0; i < ports.size(); i++)
{
if(*ports[i] != "")
if(ports[i] != "")
{
HuePlusController* controller = new HuePlusController();
controller->Initialize((char *)ports[i]->c_str());
controller->Initialize((char *)ports[i].c_str());
RGBController_HuePlus* rgb_controller = new RGBController_HuePlus(controller);
detected_controllers.push_back(rgb_controller);