Fixes for memory issues detected by valgrind

This commit is contained in:
Térence Clastres 2020-08-12 20:29:39 +02:00 committed by Adam Honse
parent ff07a488a2
commit 53379c5482
17 changed files with 74 additions and 27 deletions

View file

@ -33,7 +33,10 @@ EKController::EKController(hid_device* dev_handle, wchar_t *_vendor, wchar_t *_d
EKController::~EKController() EKController::~EKController()
{ {
hid_close(dev); if(dev)
{
hid_close(dev);
}
} }
char* EKController::GetDeviceName() char* EKController::GetDeviceName()

View file

@ -31,11 +31,11 @@ static const unsigned int ek_pids[][2] =
void DetectEKControllers(std::vector<RGBController*>& rgb_controllers) void DetectEKControllers(std::vector<RGBController*>& rgb_controllers)
{ {
hid_device_info* info; hid_device_info* info = NULL;
//Look for the passed in cm_pids //Look for the passed in cm_pids
hid_init(); hid_init();
info = hid_enumerate(0x0, 0x0); info = hid_enumerate(EK_VID, 0x0);
while(info) while(info)
{ {

View file

@ -22,9 +22,6 @@ void DetectGloriousModelOControllers(std::vector<RGBController*>& rgb_controller
hid_device* dev = NULL; hid_device* dev = NULL;
hid_init(); hid_init();
dev = NULL;
info = hid_enumerate(Glorious_Model_O_VID, Glorious_Model_O_PID); info = hid_enumerate(Glorious_Model_O_VID, Glorious_Model_O_PID);
//Look for Glorious Model O //Look for Glorious Model O

View file

@ -31,6 +31,7 @@ NetworkClient::NetworkClient(std::vector<RGBController *>& control) : controller
{ {
strcpy(port_ip, "127.0.0.1"); strcpy(port_ip, "127.0.0.1");
port_num = OPENRGB_SDK_PORT; port_num = OPENRGB_SDK_PORT;
client_sock = -1;
server_connected = false; server_connected = false;
server_controller_count = 0; server_controller_count = 0;
@ -38,6 +39,11 @@ NetworkClient::NetworkClient(std::vector<RGBController *>& control) : controller
ConnectionThread = NULL; ConnectionThread = NULL;
} }
NetworkClient::~NetworkClient()
{
delete ConnectionThread;
}
void NetworkClient::ClientInfoChanged() void NetworkClient::ClientInfoChanged()
{ {
ClientInfoChangeMutex.lock(); ClientInfoChangeMutex.lock();
@ -129,8 +135,12 @@ void NetworkClient::StopClient()
server_connected = false; server_connected = false;
client_active = false; client_active = false;
shutdown(client_sock, SD_RECEIVE); if (server_connected)
closesocket(client_sock); {
shutdown(client_sock, SD_RECEIVE);
closesocket(client_sock);
}
if(ListenThread) if(ListenThread)
ListenThread->join(); ListenThread->join();
ConnectionThread->join(); ConnectionThread->join();

View file

@ -21,6 +21,7 @@ class NetworkClient
{ {
public: public:
NetworkClient(std::vector<RGBController *>& control); NetworkClient(std::vector<RGBController *>& control);
~NetworkClient();
void ClientInfoChanged(); void ClientInfoChanged();

View file

@ -103,7 +103,7 @@ bool ProfileManager::LoadProfileWithOptions
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Read and verify file header | | Read and verify file header |
\*---------------------------------------------------------*/ \*---------------------------------------------------------*/
char header_string[16]; char header_string[16]{};
unsigned int header_version; unsigned int header_version;
controller_file.read(header_string, 16); controller_file.read(header_string, 16);

View file

@ -13,6 +13,7 @@ RGBController::~RGBController()
{ {
DeviceThreadRunning = false; DeviceThreadRunning = false;
DeviceCallThread->join(); DeviceCallThread->join();
delete DeviceCallThread;
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Delete the matrix map | | Delete the matrix map |

View file

@ -158,7 +158,7 @@ public:
| RGBController base class constructor | | RGBController base class constructor |
\*---------------------------------------------------------*/ \*---------------------------------------------------------*/
RGBController(); RGBController();
~RGBController(); virtual ~RGBController();
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Generic functions implemented in RGBController.cpp | | Generic functions implemented in RGBController.cpp |

View file

@ -207,6 +207,11 @@ RGBController_AuraSMBus::RGBController_AuraSMBus(AuraSMBusController * aura_ptr)
active_mode = GetDeviceMode(); active_mode = GetDeviceMode();
} }
RGBController_AuraSMBus::~RGBController_AuraSMBus()
{
delete aura;
}
void RGBController_AuraSMBus::SetupZones() void RGBController_AuraSMBus::SetupZones()
{ {
std::vector<int> aura_led_map; std::vector<int> aura_led_map;

View file

@ -16,6 +16,7 @@ class RGBController_AuraSMBus : public RGBController
{ {
public: public:
RGBController_AuraSMBus(AuraSMBusController* aura_ptr); RGBController_AuraSMBus(AuraSMBusController* aura_ptr);
~RGBController_AuraSMBus();
void SetupZones(); void SetupZones();

View file

@ -34,6 +34,9 @@ ResourceManager::~ResourceManager()
{ {
//delete bus; //delete bus;
} }
DetectDevicesThread->join();
delete DetectDevicesThread;
} }
void ResourceManager::RegisterI2CBus(i2c_smbus_interface *bus) void ResourceManager::RegisterI2CBus(i2c_smbus_interface *bus)

View file

@ -27,6 +27,11 @@ i2c_smbus_interface::i2c_smbus_interface()
i2c_smbus_thread = new std::thread(&i2c_smbus_interface::i2c_smbus_thread_function, this); i2c_smbus_thread = new std::thread(&i2c_smbus_interface::i2c_smbus_thread_function, this);
} }
i2c_smbus_interface::~i2c_smbus_interface()
{
delete i2c_smbus_thread;
}
s32 i2c_smbus_interface::i2c_smbus_write_quick(u8 addr, u8 value) s32 i2c_smbus_interface::i2c_smbus_write_quick(u8 addr, u8 value)
{ {
return i2c_smbus_xfer_call(addr, value, 0, I2C_SMBUS_QUICK, NULL); return i2c_smbus_xfer_call(addr, value, 0, I2C_SMBUS_QUICK, NULL);

View file

@ -66,7 +66,7 @@ public:
int pci_subsystem_vendor; int pci_subsystem_vendor;
i2c_smbus_interface(); i2c_smbus_interface();
virtual ~i2c_smbus_interface() = default; virtual ~i2c_smbus_interface();
void i2c_smbus_thread_function(); void i2c_smbus_thread_function();

View file

@ -54,6 +54,7 @@ void i2c_smbus_linux_detect(std::vector<i2c_smbus_interface*> &busses)
if(dir == NULL) if(dir == NULL)
{ {
closedir(dir);
return; return;
} }
@ -172,6 +173,7 @@ void i2c_smbus_linux_detect(std::vector<i2c_smbus_interface*> &busses)
} }
ent = readdir(dir); ent = readdir(dir);
} }
closedir(dir);
} }
REGISTER_I2C_BUS_DETECTOR(i2c_smbus_linux_detect); REGISTER_I2C_BUS_DETECTOR(i2c_smbus_linux_detect);

View file

@ -36,7 +36,7 @@ net_port::net_port(const char * client_name, const char * port)
net_port::~net_port() net_port::~net_port()
{ {
freeaddrinfo(result_list);
} }
bool net_port::udp_client(const char * client_name, const char * port) bool net_port::udp_client(const char * client_name, const char * port)

View file

@ -33,6 +33,7 @@ std::vector<std::string *> find_usb_serial_port(unsigned short vid, unsigned sho
if(dir == NULL) if(dir == NULL)
{ {
closedir(dir);
return ret_vector; return ret_vector;
} }
@ -122,6 +123,8 @@ std::vector<std::string *> find_usb_serial_port(unsigned short vid, unsigned sho
ent = readdir(dir); ent = readdir(dir);
} }
closedir(dir);
return ret_vector; return ret_vector;
} /* find_usb_serial_port() */ } /* find_usb_serial_port() */

View file

@ -36,11 +36,15 @@ void superio_enter(int ioreg)
#else #else
unsigned char temp = 0x87; unsigned char temp = 0x87;
dev_port_fd = open("/dev/port", O_RDWR, "rw"); dev_port_fd = open("/dev/port", O_RDWR, "rw");
lseek(dev_port_fd, ioreg, SEEK_SET);
write(dev_port_fd, &temp, 1); if (dev_port_fd >= 0)
lseek(dev_port_fd, ioreg, SEEK_SET); {
write(dev_port_fd, &temp, 1); lseek(dev_port_fd, ioreg, SEEK_SET);
close(dev_port_fd); write(dev_port_fd, &temp, 1);
lseek(dev_port_fd, ioreg, SEEK_SET);
write(dev_port_fd, &temp, 1);
close(dev_port_fd);
}
#endif #endif
} }
@ -60,10 +64,14 @@ void superio_outb(int ioreg, int reg, int val)
Out32(ioreg + 1, val); Out32(ioreg + 1, val);
#else #else
dev_port_fd = open("/dev/port", O_RDWR, "rw"); dev_port_fd = open("/dev/port", O_RDWR, "rw");
lseek(dev_port_fd, ioreg, SEEK_SET);
write(dev_port_fd, &reg, 1); if (dev_port_fd >= 0)
write(dev_port_fd, &val, 1); {
close(dev_port_fd); lseek(dev_port_fd, ioreg, SEEK_SET);
write(dev_port_fd, &reg, 1);
write(dev_port_fd, &val, 1);
close(dev_port_fd);
}
#endif #endif
} }
@ -82,12 +90,20 @@ int superio_inb(int ioreg, int reg)
Out32(ioreg, reg); Out32(ioreg, reg);
return Inp32(ioreg + 1); return Inp32(ioreg + 1);
#else #else
unsigned char temp; unsigned char temp = 0;
dev_port_fd = open("/dev/port", O_RDWR, "rw"); dev_port_fd = open("/dev/port", O_RDWR, "rw");
lseek(dev_port_fd, ioreg, SEEK_SET);
write(dev_port_fd, &reg, 1); if (dev_port_fd >= 0)
read(dev_port_fd, &temp, 1); {
close(dev_port_fd); lseek(dev_port_fd, ioreg, SEEK_SET);
return((int)temp); write(dev_port_fd, &reg, 1);
read(dev_port_fd, &temp, 1);
close(dev_port_fd);
return((int)temp);
}
else
{
return -1;
}
#endif #endif
} }