diff --git a/source/ngc/fileop.cpp b/source/ngc/fileop.cpp index 2b618bd..b42a079 100644 --- a/source/ngc/fileop.cpp +++ b/source/ngc/fileop.cpp @@ -35,7 +35,8 @@ #include "filebrowser.h" #include "preferences.h" -unsigned char * savebuffer = NULL; +unsigned char savebuffer[SAVEBUFFERSIZE] ATTRIBUTE_ALIGN(32); +static mutex_t bufferLock = LWP_MUTEX_NULL; FILE * file; // file pointer - the only one we should ever use! bool unmountRequired[9] = { false, false, false, false, false, false, false, false, false }; bool isMounted[9] = { false, false, false, false, false, false, false, false, false }; @@ -419,10 +420,11 @@ ParseDirectory(int method) void AllocSaveBuffer () { - while(savebuffer != NULL) // save buffer is in use - usleep(50); // wait for it to be free + if(bufferLock == LWP_MUTEX_NULL) + LWP_MutexInit(&bufferLock, false); - savebuffer = (unsigned char *) memalign(32, SAVEBUFFERSIZE); + if(bufferLock != LWP_MUTEX_NULL) + LWP_MutexLock(bufferLock); memset (savebuffer, 0, SAVEBUFFERSIZE); } @@ -433,10 +435,8 @@ AllocSaveBuffer () void FreeSaveBuffer () { - if (savebuffer != NULL) - free(savebuffer); - - savebuffer = NULL; + if(bufferLock != LWP_MUTEX_NULL) + LWP_MutexUnlock(bufferLock); } /**************************************************************************** diff --git a/source/ngc/fileop.h b/source/ngc/fileop.h index 9768c7d..68b7a9a 100644 --- a/source/ngc/fileop.h +++ b/source/ngc/fileop.h @@ -38,7 +38,7 @@ u32 LoadSzFile(char * filepath, unsigned char * rbuffer); u32 SaveFile(char * buffer, char *filepath, u32 datasize, int method, bool silent); u32 SaveFile(char * filepath, u32 datasize, int method, bool silent); -extern unsigned char * savebuffer; +extern unsigned char savebuffer[SAVEBUFFERSIZE]; extern FILE * file; extern bool unmountRequired[]; extern bool isMounted[];