reduce memory fragmentation with static savebuffer

This commit is contained in:
dborth 2009-06-01 21:56:38 +00:00
parent fd1fdc585c
commit d64c223a62
2 changed files with 9 additions and 9 deletions

View File

@ -33,7 +33,8 @@
#include "filebrowser.h" #include "filebrowser.h"
#include "preferences.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! FILE * file; // file pointer - the only one we should ever use!
bool unmountRequired[9] = { false, false, false, false, false, false, false, false, false }; bool unmountRequired[9] = { false, false, false, false, false, false, false, false, false };
bool isMounted[9] = { false, false, false, false, false, false, false, false, false }; bool isMounted[9] = { false, false, false, false, false, false, false, false, false };
@ -417,10 +418,11 @@ ParseDirectory(int method)
void void
AllocSaveBuffer () AllocSaveBuffer ()
{ {
while(savebuffer != NULL) // save buffer is in use if(bufferLock == LWP_MUTEX_NULL)
usleep(50); // wait for it to be free LWP_MutexInit(&bufferLock, false);
savebuffer = (unsigned char *) memalign(32, SAVEBUFFERSIZE); if(bufferLock != LWP_MUTEX_NULL)
LWP_MutexLock(bufferLock);
memset (savebuffer, 0, SAVEBUFFERSIZE); memset (savebuffer, 0, SAVEBUFFERSIZE);
} }
@ -431,10 +433,8 @@ AllocSaveBuffer ()
void void
FreeSaveBuffer () FreeSaveBuffer ()
{ {
if (savebuffer != NULL) if(bufferLock != LWP_MUTEX_NULL)
free(savebuffer); LWP_MutexUnlock(bufferLock);
savebuffer = NULL;
} }
/**************************************************************************** /****************************************************************************

View File

@ -35,7 +35,7 @@ u32 LoadSzFile(char * filepath, unsigned char * rbuffer);
u32 SaveFile(char * buffer, char *filepath, u32 datasize, int method, bool silent); u32 SaveFile(char * buffer, char *filepath, u32 datasize, int method, bool silent);
u32 SaveFile(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[];
extern FILE * file; extern FILE * file;
extern bool unmountRequired[]; extern bool unmountRequired[];
extern bool isMounted[]; extern bool isMounted[];