FireBirdLib - Topfield TMS PVR TAP Programming Library
FMUC_MemDebug.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include "FBLib_FontManager.h"
3
5
6void FMUC_MemoryDump(dword *NrReservations, dword *NrTotalSize)
7{
8 int i;
9 dword Nr, Total;
10 tFMUC_MemDebug *Mem;
11
12 Nr = 0;
13 Total = 0;
14 Mem = &FMUC_Memory[0];
15
16 for(i = 0; i < 10000; i++)
17 {
18 if(Mem->Alloc != NULL)
19 {
20 Nr++;
21 Total = Total + Mem->Size;
22 }
23 Mem++;
24 }
25
26 if(NrReservations) *NrReservations = Nr;
27 if(NrTotalSize) *NrTotalSize = Total;
28}
29
31{
32 int i;
33 tFMUC_MemDebug *Mem;
34
35 Mem = &FMUC_Memory[0];
36 for(i = 0; i < 10000; i++)
37 {
38 if(Mem->Alloc == NULL) return Mem;
39 Mem++;
40 }
41
42 return NULL;
43}
44
46{
47 int i;
48 tFMUC_MemDebug *Mem;
49
50 Mem = &FMUC_Memory[0];
51 for(i = 0; i < 10000; i++)
52 {
53 if(Mem->Alloc == Pointer) return Mem;
54 Mem++;
55 }
56
57 return NULL;
58}
59
60void *FMUC_ReserveMemory(char *Requester, dword size)
61{
62 tFMUC_MemDebug *Mem;
63 void *ret;
64 dword NrReservations, NrTotalSize;
65
66 ret = TAP_MemAlloc(size);
67 return ret;
68
69 Mem = FMUC_MemoryFindFree();
70 if(Mem == NULL)
71 {
72 LogEntryFBLibPrintf(TRUE, "FMUC_ReserveMemory: no space in lookup table");
73 return ret;
74 }
75
76 Mem->Requester = Requester;
77 Mem->Size = size;
78 Mem->Alloc = ret;
79
80
81 FMUC_MemoryDump(&NrReservations, &NrTotalSize);
82 LogEntryFBLibPrintf(TRUE, "FMUC: %s has requested %lu bytes. Currently %lu, %lu bytes", Requester, size, NrReservations, NrTotalSize);
83
84 return ret;
85}
86
87void FMUC_FreeMemory(char *Requester, void *Pointer)
88{
89 tFMUC_MemDebug *Mem;
90 dword NrReservations, NrTotalSize;
91
92 TAP_MemFree(Pointer);
93 return;
94
95 Mem = FMUC_MemoryFindPointer(Pointer);
96 if(Mem == NULL)
97 {
98 LogEntryFBLibPrintf(TRUE, "FMUC_FreeMemory: entry not found in lookup table");
99 return;
100 }
101
102 Mem->Alloc = NULL;
103 FMUC_MemoryDump(&NrReservations, &NrTotalSize);
104
105 LogEntryFBLibPrintf(TRUE, "FMUC: '%s' has released %lu bytes from '%s'. Currently %lu, %lu bytes", Requester, Mem->Size, Mem->Requester, NrReservations, NrTotalSize);
106
107 Mem->Size = 0;
108 Mem->Requester = NULL;
109}
void FMUC_MemoryDump(dword *NrReservations, dword *NrTotalSize)
Definition: FMUC_MemDebug.c:6
void FMUC_FreeMemory(char *Requester, void *Pointer)
Definition: FMUC_MemDebug.c:87
tFMUC_MemDebug * FMUC_MemoryFindPointer(void *Pointer)
Definition: FMUC_MemDebug.c:45
tFMUC_MemDebug * FMUC_MemoryFindFree(void)
Definition: FMUC_MemDebug.c:30
tFMUC_MemDebug FMUC_Memory[10000]
Definition: FMUC_MemDebug.c:4
void * FMUC_ReserveMemory(char *Requester, dword size)
Definition: FMUC_MemDebug.c:60
void LogEntryFBLibPrintf(bool Console, char *format,...)