Fix deallocation of GC Adapter
This commit is contained in:
		@@ -130,6 +130,7 @@ void Adapter::Read() {
 | 
			
		||||
 | 
			
		||||
        if (payload_size != sizeof(controller_payload_copy) ||
 | 
			
		||||
            controller_payload_copy[0] != LIBUSB_DT_HID) {
 | 
			
		||||
            // TODO: It might be worthwhile to Shutdown GC Adapter if we encounter errors here
 | 
			
		||||
            LOG_ERROR(Input, "error reading payload (size: %d, type: %02x)", payload_size,
 | 
			
		||||
                      controller_payload_copy[0]);
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -200,6 +201,7 @@ void Adapter::StartScanThread() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Adapter::StopScanThread() {
 | 
			
		||||
    detect_thread_running = false;
 | 
			
		||||
    detect_thread.join();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -298,8 +300,6 @@ void Adapter::GetGCEndpoint(libusb_device* device) {
 | 
			
		||||
Adapter::~Adapter() {
 | 
			
		||||
    StopScanThread();
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    current_status = NO_ADAPTER_DETECTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Adapter::Reset() {
 | 
			
		||||
@@ -312,11 +312,11 @@ void Adapter::Reset() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (adapter_thread_running) {
 | 
			
		||||
        adapter_thread_running = false;
 | 
			
		||||
        adapter_input_thread.join();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    adapter_controllers_status.fill(ControllerTypes::None);
 | 
			
		||||
 | 
			
		||||
    current_status = NO_ADAPTER_DETECTED;
 | 
			
		||||
 | 
			
		||||
    if (usb_adapter_handle) {
 | 
			
		||||
@@ -324,6 +324,10 @@ void Adapter::Reset() {
 | 
			
		||||
        libusb_close(usb_adapter_handle);
 | 
			
		||||
        usb_adapter_handle = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (libusb_ctx) {
 | 
			
		||||
        libusb_exit(libusb_ctx);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Adapter::DeviceConnected(int port) {
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,6 @@ enum {
 | 
			
		||||
    ADAPTER_DETECTED = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Singleton Adapter class
 | 
			
		||||
class Adapter {
 | 
			
		||||
public:
 | 
			
		||||
    /// Initialize the GC Adapter capture and read sequence
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,10 @@ void Shutdown() {
 | 
			
		||||
#endif
 | 
			
		||||
    udp.reset();
 | 
			
		||||
    Input::UnregisterFactory<Input::ButtonDevice>("gcpad");
 | 
			
		||||
    Input::UnregisterFactory<Input::AnalogDevice>("gcpad");
 | 
			
		||||
 | 
			
		||||
    gcbuttons.reset();
 | 
			
		||||
    gcanalog.reset();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Keyboard* GetKeyboard() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user