Tracking memory allocation
lats at yless4u.com.au
Thu Oct 26 07:46:00 CDT 2006
Robert Shearman wrote:
> Jeff L wrote:
>> It seems that this would not be a unique problem in wine, is there a
>> standard way to handle memory tracking so that if memory is freed, at
>> a later time we can check to see if the pointer is still valid?
> It sounds like you could benefit from using the handle table functions
> in ntdll.
Looks promising. There don't appear to be examples of how to use the
functions. I assume that I declare memory to be of type
RTL_HANDLE_TABLE and call RtlInitializeHandleTable to initialise it.
Then there is a call to RtlpAllocateSomeHandles to get the space for the
handles. After this RtlAllocateHandle gets a handle off the free list
and RtlFreeHandle to release the handle.
How do you access the memory pointed to by the handle? I was thinking
that I would need to stash the address I am managing into the handle.
It looks like I can do that with the RTL_HANDLE pointer retuned by
RtlAllocateHandle but from then on it does not look like I can get the
address of the handle as RtlIsValidHandle etc do not return it.
If I run out of handles, how do I reallocate the table or add to it?
Are the functions thread safe if I anchor the handletable off a static
variable in the dll? I am going to need a persistent table for the life
of the dll. Hence it has the potential to be used by multiple threads.
More information about the wine-devel