From 91590b0cf09195346ed1c6dcd0840a8172b735d9 Mon Sep 17 00:00:00 2001 From: Marcel Admiraal Date: Fri, 29 May 2020 16:39:58 +0100 Subject: [PATCH] Add dinput nullptr checks. (cherry picked from commit bc49d3412349ed11c03618c96c4889c5620fe5f0) --- platform/windows/joypad_windows.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp index 6e23671d3e1..f18f5efd58a 100644 --- a/platform/windows/joypad_windows.cpp +++ b/platform/windows/joypad_windows.cpp @@ -76,13 +76,17 @@ JoypadWindows::JoypadWindows(InputDefault *_input, HWND *hwnd) { ERR_PRINT("The Windows DirectInput subsystem could not allocate sufficient memory."); ERR_PRINT("Rebooting your PC may solve this issue."); } + // Ensure dinput is still a nullptr. + dinput = nullptr; } } JoypadWindows::~JoypadWindows() { close_joypad(); - dinput->Release(); + if (dinput) { + dinput->Release(); + } unload_xinput(); } @@ -146,6 +150,7 @@ bool JoypadWindows::is_xinput_device(const GUID *p_guid) { bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { + ERR_FAIL_NULL_V_MSG(dinput, false, "DirectInput not initialized. Rebooting your PC may solve this issue."); HRESULT hr; int num = input->get_unused_joy_id(); @@ -284,6 +289,7 @@ void JoypadWindows::close_joypad(int id) { void JoypadWindows::probe_joypads() { + ERR_FAIL_NULL_MSG(dinput, "DirectInput not initialized. Rebooting your PC may solve this issue."); DWORD dwResult; for (DWORD i = 0; i < XUSER_MAX_COUNT; i++) {