windowsrawinput: Fix incorrect INVALID_HANDLE_VALUE checks.
CreateEvent/CreateThread return NULL on failure.
This commit is contained in:
committed by
Sam Lantinga
parent
00f9a25879
commit
706e7f9043
@@ -46,13 +46,7 @@ typedef struct
|
|||||||
HANDLE thread;
|
HANDLE thread;
|
||||||
} RawInputThreadData;
|
} RawInputThreadData;
|
||||||
|
|
||||||
static RawInputThreadData thread_data = {
|
static RawInputThreadData thread_data = { 0 };
|
||||||
false,
|
|
||||||
0,
|
|
||||||
INVALID_HANDLE_VALUE,
|
|
||||||
INVALID_HANDLE_VALUE,
|
|
||||||
INVALID_HANDLE_VALUE
|
|
||||||
};
|
|
||||||
|
|
||||||
static DWORD WINAPI WIN_RawInputThread(LPVOID param)
|
static DWORD WINAPI WIN_RawInputThread(LPVOID param)
|
||||||
{
|
{
|
||||||
@@ -140,22 +134,22 @@ static DWORD WINAPI WIN_RawInputThread(LPVOID param)
|
|||||||
|
|
||||||
static void CleanupRawInputThreadData(RawInputThreadData *data)
|
static void CleanupRawInputThreadData(RawInputThreadData *data)
|
||||||
{
|
{
|
||||||
if (data->thread != INVALID_HANDLE_VALUE) {
|
if (data->thread) {
|
||||||
data->done = true;
|
data->done = true;
|
||||||
SetEvent(data->signal_event);
|
SetEvent(data->signal_event);
|
||||||
WaitForSingleObject(data->thread, 3000);
|
WaitForSingleObject(data->thread, 3000);
|
||||||
CloseHandle(data->thread);
|
CloseHandle(data->thread);
|
||||||
data->thread = INVALID_HANDLE_VALUE;
|
data->thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->ready_event != INVALID_HANDLE_VALUE) {
|
if (data->ready_event) {
|
||||||
CloseHandle(data->ready_event);
|
CloseHandle(data->ready_event);
|
||||||
data->ready_event = INVALID_HANDLE_VALUE;
|
data->ready_event = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->signal_event != INVALID_HANDLE_VALUE) {
|
if (data->signal_event) {
|
||||||
CloseHandle(data->signal_event);
|
CloseHandle(data->signal_event);
|
||||||
data->signal_event = INVALID_HANDLE_VALUE;
|
data->signal_event = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,20 +164,20 @@ bool WIN_SetRawInputEnabled(SDL_VideoDevice *_this, Uint32 flags)
|
|||||||
|
|
||||||
thread_data.flags = flags;
|
thread_data.flags = flags;
|
||||||
thread_data.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
thread_data.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
if (thread_data.ready_event == INVALID_HANDLE_VALUE) {
|
if (!thread_data.ready_event) {
|
||||||
WIN_SetError("CreateEvent");
|
WIN_SetError("CreateEvent");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread_data.done = false;
|
thread_data.done = false;
|
||||||
thread_data.signal_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
thread_data.signal_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
if (thread_data.signal_event == INVALID_HANDLE_VALUE) {
|
if (!thread_data.signal_event) {
|
||||||
WIN_SetError("CreateEvent");
|
WIN_SetError("CreateEvent");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread_data.thread = CreateThread(NULL, 0, WIN_RawInputThread, &thread_data, 0, NULL);
|
thread_data.thread = CreateThread(NULL, 0, WIN_RawInputThread, &thread_data, 0, NULL);
|
||||||
if (thread_data.thread == INVALID_HANDLE_VALUE) {
|
if (!thread_data.thread) {
|
||||||
WIN_SetError("CreateThread");
|
WIN_SetError("CreateThread");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user