diff --git a/Controllers/EKController/EKController.cpp b/Controllers/EKController/EKController.cpp index cd34b67f..06afeb8d 100644 --- a/Controllers/EKController/EKController.cpp +++ b/Controllers/EKController/EKController.cpp @@ -33,7 +33,10 @@ EKController::EKController(hid_device* dev_handle, wchar_t *_vendor, wchar_t *_d EKController::~EKController() { - hid_close(dev); + if(dev) + { + hid_close(dev); + } } char* EKController::GetDeviceName() diff --git a/Controllers/EKController/EKControllerDetect.cpp b/Controllers/EKController/EKControllerDetect.cpp index b5725b73..5fe86035 100644 --- a/Controllers/EKController/EKControllerDetect.cpp +++ b/Controllers/EKController/EKControllerDetect.cpp @@ -31,11 +31,11 @@ static const unsigned int ek_pids[][2] = void DetectEKControllers(std::vector& rgb_controllers) { - hid_device_info* info; + hid_device_info* info = NULL; //Look for the passed in cm_pids hid_init(); - info = hid_enumerate(0x0, 0x0); + info = hid_enumerate(EK_VID, 0x0); while(info) { diff --git a/Controllers/GloriousModelOController/GloriousModelOControllerDetect.cpp b/Controllers/GloriousModelOController/GloriousModelOControllerDetect.cpp index 3fb5932f..42f7bfa4 100644 --- a/Controllers/GloriousModelOController/GloriousModelOControllerDetect.cpp +++ b/Controllers/GloriousModelOController/GloriousModelOControllerDetect.cpp @@ -22,9 +22,6 @@ void DetectGloriousModelOControllers(std::vector& rgb_controller hid_device* dev = NULL; hid_init(); - - dev = NULL; - info = hid_enumerate(Glorious_Model_O_VID, Glorious_Model_O_PID); //Look for Glorious Model O diff --git a/NetworkClient.cpp b/NetworkClient.cpp index e59440e5..23638247 100644 --- a/NetworkClient.cpp +++ b/NetworkClient.cpp @@ -31,6 +31,7 @@ NetworkClient::NetworkClient(std::vector& control) : controller { strcpy(port_ip, "127.0.0.1"); port_num = OPENRGB_SDK_PORT; + client_sock = -1; server_connected = false; server_controller_count = 0; @@ -38,6 +39,11 @@ NetworkClient::NetworkClient(std::vector& control) : controller ConnectionThread = NULL; } +NetworkClient::~NetworkClient() +{ + delete ConnectionThread; +} + void NetworkClient::ClientInfoChanged() { ClientInfoChangeMutex.lock(); @@ -129,8 +135,12 @@ void NetworkClient::StopClient() server_connected = false; client_active = false; - shutdown(client_sock, SD_RECEIVE); - closesocket(client_sock); + if (server_connected) + { + shutdown(client_sock, SD_RECEIVE); + closesocket(client_sock); + } + if(ListenThread) ListenThread->join(); ConnectionThread->join(); diff --git a/NetworkClient.h b/NetworkClient.h index 18dd8310..11c7c313 100644 --- a/NetworkClient.h +++ b/NetworkClient.h @@ -21,6 +21,7 @@ class NetworkClient { public: NetworkClient(std::vector& control); + ~NetworkClient(); void ClientInfoChanged(); diff --git a/ProfileManager.cpp b/ProfileManager.cpp index b31f881d..c4f26a46 100644 --- a/ProfileManager.cpp +++ b/ProfileManager.cpp @@ -103,7 +103,7 @@ bool ProfileManager::LoadProfileWithOptions /*---------------------------------------------------------*\ | Read and verify file header | \*---------------------------------------------------------*/ - char header_string[16]; + char header_string[16]{}; unsigned int header_version; controller_file.read(header_string, 16); diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index 4f8be0bd..1434bb79 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -13,6 +13,7 @@ RGBController::~RGBController() { DeviceThreadRunning = false; DeviceCallThread->join(); + delete DeviceCallThread; /*---------------------------------------------------------*\ | Delete the matrix map | diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h index 545f7f80..1aa54968 100644 --- a/RGBController/RGBController.h +++ b/RGBController/RGBController.h @@ -158,7 +158,7 @@ public: | RGBController base class constructor | \*---------------------------------------------------------*/ RGBController(); - ~RGBController(); + virtual ~RGBController(); /*---------------------------------------------------------*\ | Generic functions implemented in RGBController.cpp | diff --git a/RGBController/RGBController_AuraSMBus.cpp b/RGBController/RGBController_AuraSMBus.cpp index 1ca3d184..0fb8ba11 100644 --- a/RGBController/RGBController_AuraSMBus.cpp +++ b/RGBController/RGBController_AuraSMBus.cpp @@ -207,6 +207,11 @@ RGBController_AuraSMBus::RGBController_AuraSMBus(AuraSMBusController * aura_ptr) active_mode = GetDeviceMode(); } +RGBController_AuraSMBus::~RGBController_AuraSMBus() +{ + delete aura; +} + void RGBController_AuraSMBus::SetupZones() { std::vector aura_led_map; diff --git a/RGBController/RGBController_AuraSMBus.h b/RGBController/RGBController_AuraSMBus.h index fe7c9770..f49e16ba 100644 --- a/RGBController/RGBController_AuraSMBus.h +++ b/RGBController/RGBController_AuraSMBus.h @@ -16,6 +16,7 @@ class RGBController_AuraSMBus : public RGBController { public: RGBController_AuraSMBus(AuraSMBusController* aura_ptr); + ~RGBController_AuraSMBus(); void SetupZones(); diff --git a/ResourceManager.cpp b/ResourceManager.cpp index 69a68821..139cbf2f 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -34,6 +34,9 @@ ResourceManager::~ResourceManager() { //delete bus; } + + DetectDevicesThread->join(); + delete DetectDevicesThread; } void ResourceManager::RegisterI2CBus(i2c_smbus_interface *bus) diff --git a/i2c_smbus/i2c_smbus.cpp b/i2c_smbus/i2c_smbus.cpp index 5499638e..de59638b 100644 --- a/i2c_smbus/i2c_smbus.cpp +++ b/i2c_smbus/i2c_smbus.cpp @@ -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_interface::~i2c_smbus_interface() +{ + delete i2c_smbus_thread; +} + s32 i2c_smbus_interface::i2c_smbus_write_quick(u8 addr, u8 value) { return i2c_smbus_xfer_call(addr, value, 0, I2C_SMBUS_QUICK, NULL); diff --git a/i2c_smbus/i2c_smbus.h b/i2c_smbus/i2c_smbus.h index c55bd82a..d8501d48 100644 --- a/i2c_smbus/i2c_smbus.h +++ b/i2c_smbus/i2c_smbus.h @@ -66,7 +66,7 @@ public: int pci_subsystem_vendor; i2c_smbus_interface(); - virtual ~i2c_smbus_interface() = default; + virtual ~i2c_smbus_interface(); void i2c_smbus_thread_function(); diff --git a/i2c_smbus/i2c_smbus_linux.cpp b/i2c_smbus/i2c_smbus_linux.cpp index 6437ce01..ba5ca7be 100644 --- a/i2c_smbus/i2c_smbus_linux.cpp +++ b/i2c_smbus/i2c_smbus_linux.cpp @@ -54,6 +54,7 @@ void i2c_smbus_linux_detect(std::vector &busses) if(dir == NULL) { + closedir(dir); return; } @@ -172,6 +173,7 @@ void i2c_smbus_linux_detect(std::vector &busses) } ent = readdir(dir); } + closedir(dir); } REGISTER_I2C_BUS_DETECTOR(i2c_smbus_linux_detect); diff --git a/net_port/net_port.cpp b/net_port/net_port.cpp index 7fad900c..14535805 100644 --- a/net_port/net_port.cpp +++ b/net_port/net_port.cpp @@ -36,7 +36,7 @@ net_port::net_port(const char * client_name, const char * port) net_port::~net_port() { - + freeaddrinfo(result_list); } bool net_port::udp_client(const char * client_name, const char * port) diff --git a/serial_port/find_usb_serial_port_linux.cpp b/serial_port/find_usb_serial_port_linux.cpp index 79425b4a..50706de7 100644 --- a/serial_port/find_usb_serial_port_linux.cpp +++ b/serial_port/find_usb_serial_port_linux.cpp @@ -33,6 +33,7 @@ std::vector find_usb_serial_port(unsigned short vid, unsigned sho if(dir == NULL) { + closedir(dir); return ret_vector; } @@ -122,6 +123,8 @@ std::vector find_usb_serial_port(unsigned short vid, unsigned sho ent = readdir(dir); } + + closedir(dir); return ret_vector; } /* find_usb_serial_port() */ diff --git a/super_io/super_io.cpp b/super_io/super_io.cpp index 44e32db6..b352905c 100644 --- a/super_io/super_io.cpp +++ b/super_io/super_io.cpp @@ -36,11 +36,15 @@ void superio_enter(int ioreg) #else unsigned char temp = 0x87; dev_port_fd = open("/dev/port", O_RDWR, "rw"); - lseek(dev_port_fd, ioreg, SEEK_SET); - write(dev_port_fd, &temp, 1); - lseek(dev_port_fd, ioreg, SEEK_SET); - write(dev_port_fd, &temp, 1); - close(dev_port_fd); + + 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); + write(dev_port_fd, &temp, 1); + close(dev_port_fd); + } #endif } @@ -60,10 +64,14 @@ void superio_outb(int ioreg, int reg, int val) Out32(ioreg + 1, val); #else dev_port_fd = open("/dev/port", O_RDWR, "rw"); - lseek(dev_port_fd, ioreg, SEEK_SET); - write(dev_port_fd, ®, 1); - write(dev_port_fd, &val, 1); - close(dev_port_fd); + + if (dev_port_fd >= 0) + { + lseek(dev_port_fd, ioreg, SEEK_SET); + write(dev_port_fd, ®, 1); + write(dev_port_fd, &val, 1); + close(dev_port_fd); + } #endif } @@ -82,12 +90,20 @@ int superio_inb(int ioreg, int reg) Out32(ioreg, reg); return Inp32(ioreg + 1); #else - unsigned char temp; + unsigned char temp = 0; dev_port_fd = open("/dev/port", O_RDWR, "rw"); - lseek(dev_port_fd, ioreg, SEEK_SET); - write(dev_port_fd, ®, 1); - read(dev_port_fd, &temp, 1); - close(dev_port_fd); - return((int)temp); + + if (dev_port_fd >= 0) + { + lseek(dev_port_fd, ioreg, SEEK_SET); + write(dev_port_fd, ®, 1); + read(dev_port_fd, &temp, 1); + close(dev_port_fd); + return((int)temp); + } + else + { + return -1; + } #endif }