feat(async): add AsyncFileReadCancel

This commit is contained in:
fallenoak 2026-01-01 21:28:54 -06:00
parent 4959fafac7
commit 45c632781b
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
3 changed files with 37 additions and 2 deletions

View File

@ -6,6 +6,10 @@
#include <common/Prop.hpp> #include <common/Prop.hpp>
#include <common/Time.hpp> #include <common/Time.hpp>
void DefaultAsyncObjectCleanupCallback(CAsyncObject* object) {
AsyncFileReadDestroyObject(object);
}
CAsyncObject* AsyncFileReadAllocObject() { CAsyncObject* AsyncFileReadAllocObject() {
AsyncFileRead::s_queueLock.Enter(); AsyncFileRead::s_queueLock.Enter();
@ -37,6 +41,33 @@ CAsyncObject* AsyncFileReadAllocObject() {
return object; return object;
} }
int32_t AsyncFileReadCancel(CAsyncObject* object, void (*cleanupCallback)(CAsyncObject* object)) {
AsyncFileRead::s_queueLock.Enter();
if (object->isCurrent) {
object->userArg = object;
if (!cleanupCallback) {
cleanupCallback = &DefaultAsyncObjectCleanupCallback;
}
object->userFailedCallback = reinterpret_cast<ASYNC_CALLBACK>(cleanupCallback);
object->userPostloadCallback = reinterpret_cast<ASYNC_CALLBACK>(cleanupCallback);
AsyncFileRead::s_queueLock.Leave();
return false;
}
SFile::Close(object->file);
AsyncFileRead::s_asyncFileReadFreeList.LinkToHead(object);
AsyncFileRead::s_queueLock.Leave();
return true;
}
void AsyncFileReadDestroyObject(CAsyncObject* object) { void AsyncFileReadDestroyObject(CAsyncObject* object) {
AsyncFileRead::s_queueLock.Enter(); AsyncFileRead::s_queueLock.Enter();

View File

@ -5,6 +5,8 @@
CAsyncObject* AsyncFileReadAllocObject(); CAsyncObject* AsyncFileReadAllocObject();
int32_t AsyncFileReadCancel(CAsyncObject* object, void (*cleanupCallback)(CAsyncObject* object));
void AsyncFileReadDestroyObject(CAsyncObject* object); void AsyncFileReadDestroyObject(CAsyncObject* object);
void AsyncFileReadInitialize(uint32_t threadSleep, uint32_t handlerTimeout); void AsyncFileReadInitialize(uint32_t threadSleep, uint32_t handlerTimeout);

View File

@ -6,6 +6,8 @@
class SFile; class SFile;
class CAsyncQueue; class CAsyncQueue;
typedef void (*ASYNC_CALLBACK)(void*);
class CAsyncObject { class CAsyncObject {
public: public:
// Member variables // Member variables
@ -13,8 +15,8 @@ class CAsyncObject {
void* buffer; void* buffer;
uint32_t size; uint32_t size;
void* userArg; void* userArg;
void (*userPostloadCallback)(void*); ASYNC_CALLBACK userPostloadCallback;
void (*userFailedCallback)(void*); ASYNC_CALLBACK userFailedCallback;
CAsyncQueue* queue; CAsyncQueue* queue;
void* ptr1C; void* ptr1C;
uint8_t priority; uint8_t priority;