From e3c74ff15d6483618690abc742643d0a70bdd270 Mon Sep 17 00:00:00 2001 From: yaw-man Date: Thu, 11 Aug 2022 19:10:55 -0300 Subject: [PATCH] Possible fix for queue overflow --- src/yaw-tab/tab.cpp | 6 +++++- src/yaw-tab/wtutil.cpp | 3 +++ src/yaw-tab/wtutil.h | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/yaw-tab/tab.cpp b/src/yaw-tab/tab.cpp index 6bc2747..45e93c6 100644 --- a/src/yaw-tab/tab.cpp +++ b/src/yaw-tab/tab.cpp @@ -29,7 +29,11 @@ public: void NewPacket() { //Serial number of newest packet. UINT oldest, newest; - gpWTQueuePacketsEx(hctx, &oldest, &newest); + //This function returns false when it fails. + if (!gpWTQueuePacketsEx(hctx, &oldest, &newest)) { + //Queue full, flush it all. + gpWTPacketsGet(hctx, gpWTQueueSizeGet(hctx), nullptr); + } //Store newest packet in pkt, flush older packets. gpWTPacket(hctx, newest, &pkt); diff --git a/src/yaw-tab/wtutil.cpp b/src/yaw-tab/wtutil.cpp index ac3bc26..ac921f1 100644 --- a/src/yaw-tab/wtutil.cpp +++ b/src/yaw-tab/wtutil.cpp @@ -39,6 +39,7 @@ WTMGRDEFCONTEXTEX gpWTMgrDefContextEx = nullptr; // TODO - add more wintab32 function pointers as needed WTQPACKETSEX gpWTQueuePacketsEx = nullptr; +WTQSIZEGET gpWTQueueSizeGet = nullptr; ////////////////////////////////////////////////////////////////////////////// // Purpose @@ -83,6 +84,7 @@ BOOL LoadWintab(void) gpWTMgrDefContext = (WTMGRDEFCONTEXT)GetProcAddress(ghWintab, "WTMgrDefContext"); gpWTMgrDefContextEx = (WTMGRDEFCONTEXTEX)GetProcAddress(ghWintab, "WTMgrDefContextEx"); gpWTQueuePacketsEx = (WTQPACKETSEX)GetProcAddress(ghWintab, "WTQueuePacketsEx"); + gpWTQueueSizeGet = (WTQSIZEGET)GetProcAddress(ghWintab, "WTQueueSizeGet"); // TODO - don't forget to NULL out pointers in UnloadWintab(). return TRUE; @@ -123,6 +125,7 @@ void UnloadWintab(void) gpWTMgrDefContext = nullptr; gpWTMgrDefContextEx = nullptr; gpWTQueuePacketsEx = nullptr; + gpWTQueueSizeGet = nullptr; } ////////////////////////////////////////////////////////////////////////////// diff --git a/src/yaw-tab/wtutil.h b/src/yaw-tab/wtutil.h index b8f9e3f..190d0aa 100644 --- a/src/yaw-tab/wtutil.h +++ b/src/yaw-tab/wtutil.h @@ -47,7 +47,8 @@ using WTMGRDEFCONTEXT = HCTX (API*)(HMGR, BOOL); using WTMGRDEFCONTEXTEX = HCTX (API*)(HMGR, UINT, BOOL); // TODO - add more wintab32 function defs as needed -using WTQPACKETSEX = BOOL(API*)(HCTX, UINT FAR*, UINT FAR*); +using WTQPACKETSEX = BOOL(API*)(HCTX, UINT FAR*, UINT FAR*); +using WTQSIZEGET = int (API*)(HCTX); ////////////////////////////////////////////////////////////////////////////// @@ -77,6 +78,7 @@ extern WTMGRDEFCONTEXTEX gpWTMgrDefContextEx; // TODO - add more wintab32 function pointers as needed extern WTQPACKETSEX gpWTQueuePacketsEx; +extern WTQSIZEGET gpWTQueueSizeGet; //////////////////////////////////////////////////////////////////////////////