Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 1226) +++ trunk/src/buffer.c (revision 1227) @@ -1030,6 +1030,16 @@ Buffers[i].Data = CreateNewBuffer(); } +void UnitBuffers(void) +{ + int i; + + for (i = 0; i < MAX_BUFFER; i++) { + ClearBuffer(Buffers+i); + free(Buffers[i].Data); + } +} + void SwapBuffers(void) { int i; Index: trunk/src/buffer.h =================================================================== --- trunk/src/buffer.h (revision 1226) +++ trunk/src/buffer.h (revision 1227) @@ -48,6 +48,7 @@ void SwapBuffers(void); void MirrorBuffer(BufferTypePtr); void InitBuffers(void); +void UnitBuffers(void); void *MoveObjectToBuffer(DataTypePtr, DataTypePtr, int, void *, void *, void *); void *CopyObjectToBuffer(DataTypePtr, DataTypePtr, int, void *, void *, void *); Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 1226) +++ trunk/src/main.c (revision 1227) @@ -1565,6 +1565,8 @@ void pcb_main_uninit(void) { + UnitBuffers(); + /* Free up memory allocated to the PCB. Why bother when we're about to exit ? * Because it removes some false positives from heap bug detectors such as * lib dmalloc.