From df48c8e500f1c49c238afa81620bad518bf3453b Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Mon, 1 Jun 2026 11:33:27 -0500 Subject: [PATCH] Consistency and fixing thread unit tests --- src/dusk/asset/asset.c | 2 +- src/dusk/asset/loader/assetloader.h | 2 +- .../asset/loader/display/assetmeshloader.c | 6 +++--- .../asset/loader/display/assettextureloader.c | 4 ++-- .../asset/loader/locale/assetlocaleloader.c | 4 ++-- src/dusk/error/error.c | 6 +++--- src/dusk/error/error.h | 3 ++- src/dusk/main.c | 6 +++--- src/dusk/save/save.c | 6 +++--- src/dusk/thread/thread.c | 6 ++++-- src/dusk/thread/threadmutex.c | 2 ++ src/duskgl/assert/assertgl.h | 2 +- src/duskgl/display/shader/shadergl.c | 18 +++++++++--------- src/duskpsp/network/networkpsp.c | 4 ++-- 14 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/dusk/asset/asset.c b/src/dusk/asset/asset.c index 1432914d..f0e400bd 100644 --- a/src/dusk/asset/asset.c +++ b/src/dusk/asset/asset.c @@ -179,7 +179,7 @@ errorret_t assetUpdate(void) { // If an error occured these things need to be true, basically just // ensuring the sync loader is setting the error correctly. - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { assertTrue( loading->entry->state == ASSET_ENTRY_STATE_ERROR, "Loader did not set entry state to error on failed load." diff --git a/src/dusk/asset/loader/assetloader.h b/src/dusk/asset/loader/assetloader.h index ef9066b9..d6850aec 100644 --- a/src/dusk/asset/loader/assetloader.h +++ b/src/dusk/asset/loader/assetloader.h @@ -69,7 +69,7 @@ extern assetloadercallbacks_t ASSET_LOADER_CALLBACKS[ASSET_LOADER_TYPE_COUNT]; * @param ret The error return value to check and chain if it's an error. */ #define assetLoaderErrorChain(loading, ret) {\ - if(ret.code != ERROR_OK) { \ + if(errorIsNotOk(ret)) { \ loading->entry->state = ASSET_ENTRY_STATE_ERROR; \ errorChain(ret); \ } \ diff --git a/src/dusk/asset/loader/display/assetmeshloader.c b/src/dusk/asset/loader/display/assetmeshloader.c index e856c14b..aa9d418a 100644 --- a/src/dusk/asset/loader/display/assetmeshloader.c +++ b/src/dusk/asset/loader/display/assetmeshloader.c @@ -47,7 +47,7 @@ errorret_t assetMeshLoaderSync(assetloading_t *loading) { for(uint32_t i = 0; i < triangleCount; i++) { assetmeshstltriangle_t triData; ret = assetFileRead(file, &triData, sizeof(triData)); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { memoryFree(verts); out->vertices = NULL; assetLoaderErrorChain(loading, ret); @@ -117,7 +117,7 @@ errorret_t assetMeshLoaderSync(assetloading_t *loading) { } ret = assetFileClose(file); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { memoryFree(verts); out->vertices = NULL; assetLoaderErrorChain(loading, ret); @@ -127,7 +127,7 @@ errorret_t assetMeshLoaderSync(assetloading_t *loading) { ret = meshInit( &out->mesh, MESH_PRIMITIVE_TYPE_TRIANGLES, triangleCount * 3, verts ); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { loading->entry->state = ASSET_ENTRY_STATE_ERROR; memoryFree(verts); out->vertices = NULL; diff --git a/src/dusk/asset/loader/display/assettextureloader.c b/src/dusk/asset/loader/display/assettextureloader.c index 8ff681bd..e6f0988f 100644 --- a/src/dusk/asset/loader/display/assettextureloader.c +++ b/src/dusk/asset/loader/display/assettextureloader.c @@ -27,7 +27,7 @@ int assetTextureReader(void *user, char *data, int size) { assertNotNull(file, "Asset file in stb_image callbacks cannot be NULL."); errorret_t ret = assetFileRead(file, data, (size_t)size); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { errorCatch(errorPrint(ret)); return -1; } @@ -40,7 +40,7 @@ void assetTextureSkipper(void *user, int n) { assertNotNull(file, "Asset file in stb_image callbacks cannot be NULL."); errorret_t ret = assetFileRead(file, NULL, (size_t)n); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { errorCatch(errorPrint(ret)); } } diff --git a/src/dusk/asset/loader/locale/assetlocaleloader.c b/src/dusk/asset/loader/locale/assetlocaleloader.c index 9eda04d6..bc6db674 100644 --- a/src/dusk/asset/loader/locale/assetlocaleloader.c +++ b/src/dusk/asset/loader/locale/assetlocaleloader.c @@ -589,7 +589,7 @@ errorret_t assetLocaleGetStringWithVA( tempBuffer, bufferSize ); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { memoryFree(tempBuffer); return ret; } @@ -637,7 +637,7 @@ errorret_t assetLocaleGetStringWithArgs( format, bufferSize ); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { memoryFree(format); return ret; } diff --git a/src/dusk/error/error.c b/src/dusk/error/error.c index b2c0d4d7..e9da89a2 100644 --- a/src/dusk/error/error.c +++ b/src/dusk/error/error.c @@ -77,7 +77,7 @@ errorret_t errorChainImpl( const char_t *function, const int32_t line ) { - if(retval.code == ERROR_OK) return retval; + if(errorIsOk(retval)) return retval; assertNotNull(retval.state, "Error state NULL (Likely missing errorOk)"); assertNotNull(retval.state->message, "Message cannot be NULL"); @@ -111,7 +111,7 @@ errorret_t errorChainImpl( } void errorCatch(errorret_t retval) { - if(retval.code == ERROR_OK) return; + if(errorIsOk(retval)) return; assertNotNull(retval.state, "Error state cannot be NULL"); assertNotNull(retval.state->message, "Message cannot be NULL"); @@ -123,7 +123,7 @@ void errorCatch(errorret_t retval) { } errorret_t errorPrint(const errorret_t retval) { - if(retval.code == ERROR_OK) return retval; + if(errorIsOk(retval)) return retval; assertNotNull(retval.state, "Error state cannot be NULL"); assertNotNull(retval.state->message, "Message cannot be NULL"); diff --git a/src/dusk/error/error.h b/src/dusk/error/error.h index 26b2de12..2ce10d9d 100644 --- a/src/dusk/error/error.h +++ b/src/dusk/error/error.h @@ -127,10 +127,11 @@ errorret_t errorPrint(const errorret_t retval); return errorChainImpl(errorChainRetval, __FILE__, __func__, __LINE__); \ } \ } - /** * Returns without an error. + * + * @return An error state with code ERROR_OK. */ #define errorOk() \ return errorOkImpl() diff --git a/src/dusk/main.c b/src/dusk/main.c index 9c8f2eb9..e9123e26 100644 --- a/src/dusk/main.c +++ b/src/dusk/main.c @@ -15,7 +15,7 @@ int main(int argc, char **argv) { // Init engine ret = engineInit(argc, (const char_t **)argv); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { errorCatch(errorPrint(ret)); return ret.code; } @@ -23,14 +23,14 @@ int main(int argc, char **argv) { // Begin main loop do { ret = engineUpdate(); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { errorCatch(errorPrint(ret)); return ret.code; } } while(ENGINE.running); ret = engineDispose(); - if(ret.code != ERROR_OK) { + if(errorIsNotOk(ret)) { errorCatch(errorPrint(ret)); return ret.code; } diff --git a/src/dusk/save/save.c b/src/dusk/save/save.c index 8fa81401..2b046807 100644 --- a/src/dusk/save/save.c +++ b/src/dusk/save/save.c @@ -50,7 +50,7 @@ errorret_t saveLoad(const uint8_t slot) { saveStreamClosePlatform(&stream); #endif - if(ret.code != ERROR_OK) return ret; + if(errorIsNotOk(ret)) return ret; errorChain(saveStreamVerifyChecksumImpl(&stream, slot)); @@ -72,7 +72,7 @@ errorret_t saveWrite(const uint8_t slot) { errorret_t ret = saveFileWrite(&stream, file); - if(ret.code == ERROR_OK) { + if(errorIsOk(ret)) { ret = saveStreamFinalizeWriteImpl(&stream); } @@ -80,7 +80,7 @@ errorret_t saveWrite(const uint8_t slot) { saveStreamClosePlatform(&stream); #endif - if(ret.code != ERROR_OK) return ret; + if(errorIsNotOk(ret)) return ret; file->exists = true; errorOk(); diff --git a/src/dusk/thread/thread.c b/src/dusk/thread/thread.c index 5627527c..aed2e937 100644 --- a/src/dusk/thread/thread.c +++ b/src/dusk/thread/thread.c @@ -14,6 +14,7 @@ void threadInit(thread_t *thread, const threadcallback_t callback) { assertNotNull(callback, "Thread callback cannot be NULL."); memoryZero(thread, sizeof(thread_t)); + threadMutexInit(&thread->stateMutex); thread->state = THREAD_STATE_STOPPED; thread->callback = callback; @@ -59,9 +60,10 @@ void threadStart(thread_t *thread) { threadStartRequest(thread); threadMutexLock(&thread->stateMutex); - threadMutexWaitLock(&thread->stateMutex); + while(thread->state == THREAD_STATE_STARTING) { + threadMutexWaitLock(&thread->stateMutex); + } threadMutexUnlock(&thread->stateMutex); - printf("Thread is now running.\n"); } void threadStop(thread_t *thread) { diff --git a/src/dusk/thread/threadmutex.c b/src/dusk/thread/threadmutex.c index 74f0544e..69e72791 100644 --- a/src/dusk/thread/threadmutex.c +++ b/src/dusk/thread/threadmutex.c @@ -10,6 +10,7 @@ void threadMutexInit(threadmutex_t *lock) { #ifdef DUSK_THREAD_PTHREAD pthread_mutex_init(&lock->mutex, NULL); + pthread_cond_init(&lock->cond, NULL); #endif } @@ -46,5 +47,6 @@ void threadMutexSignal(threadmutex_t *lock) { void threadMutexDispose(threadmutex_t *lock) { #ifdef DUSK_THREAD_PTHREAD pthread_mutex_destroy(&lock->mutex); + pthread_cond_destroy(&lock->cond); #endif } \ No newline at end of file diff --git a/src/duskgl/assert/assertgl.h b/src/duskgl/assert/assertgl.h index 03425cd0..db80b5d4 100644 --- a/src/duskgl/assert/assertgl.h +++ b/src/duskgl/assert/assertgl.h @@ -10,6 +10,6 @@ #include "error/errorgl.h" #define assertNoGLError(message) \ - assertTrue(errorGLCheck().code == ERROR_OK, message) + assertTrue(errorIsOk(errorGLCheck()), message) // EOF \ No newline at end of file diff --git a/src/duskgl/display/shader/shadergl.c b/src/duskgl/display/shader/shadergl.c index 58c956a8..3a53ceea 100644 --- a/src/duskgl/display/shader/shadergl.c +++ b/src/duskgl/display/shader/shadergl.c @@ -40,14 +40,14 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { glShaderSource(shader->vertexShaderId, 1, &def->vert, NULL); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); errorChain(err); } glCompileShader(shader->vertexShaderId); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); errorChain(err); } @@ -64,14 +64,14 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { // Create fragment shader shader->fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); errorChain(err); } glShaderSource(shader->fragmentShaderId, 1, &def->frag, NULL); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); errorChain(err); @@ -79,7 +79,7 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { glCompileShader(shader->fragmentShaderId); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); errorChain(err); @@ -97,7 +97,7 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { // Create shader program shader->shaderProgramId = glCreateProgram(); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); errorChain(err); @@ -105,7 +105,7 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { glAttachShader(shader->shaderProgramId, shader->vertexShaderId); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteProgram(shader->shaderProgramId); glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); @@ -114,7 +114,7 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { glAttachShader(shader->shaderProgramId, shader->fragmentShaderId); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteProgram(shader->shaderProgramId); glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); @@ -123,7 +123,7 @@ errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def) { glLinkProgram(shader->shaderProgramId); err = errorGLCheck(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { glDeleteProgram(shader->shaderProgramId); glDeleteShader(shader->vertexShaderId); glDeleteShader(shader->fragmentShaderId); diff --git a/src/duskpsp/network/networkpsp.c b/src/duskpsp/network/networkpsp.c index 19e0fd9d..b83b4443 100644 --- a/src/duskpsp/network/networkpsp.c +++ b/src/duskpsp/network/networkpsp.c @@ -101,7 +101,7 @@ errorret_t networkPSPUpdate() { // Kill the PSP network stack. errorret_t err = networkPSPTerm(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { errorCatch(errorPrint(err)); } @@ -203,7 +203,7 @@ void networkPSPRequestDisconnection( ); errorret_t err = networkPSPTerm(); - if(err.code != ERROR_OK) { + if(errorIsNotOk(err)) { errorCatch(errorPrint(err)); }