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/Time.hpp>
void DefaultAsyncObjectCleanupCallback(CAsyncObject* object) {
AsyncFileReadDestroyObject(object);
}
CAsyncObject* AsyncFileReadAllocObject() {
AsyncFileRead::s_queueLock.Enter();
@ -37,6 +41,33 @@ CAsyncObject* AsyncFileReadAllocObject() {
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) {
AsyncFileRead::s_queueLock.Enter();

View File

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

View File

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