On Mon, 23 Nov 2009, Maurilio Longo wrote:
> there is no MMAP api on OS/2.
Just like in MS-Windows.
> Long ago I write an emulation layer which is
> still around to help porting miniSQL to OS/2. It worked ok, but it was an hack
> with several limitations (in particular for mmapping shared regions).
> In my opinion dlmalloc should not be used on OS/2 if it does not work without
> mmap().
It works without MMAP.
It does not need strict MMAPs but only access to functions which allocates
and frees range of memory pages from system. See code below used in
MS-Windows builds. I do not know details of OS2 API but seems that adding
support for OS2 is only simple replacing Virtual*() WIN-API functions with
Dos*Mem() OS2-API functions. If I'm right then above modification can be
done in few minutes. What do you think about it?
best regards,
Przemek
> > This code is used for WIN32 builds:
> >
> > /* Win32 MMAP via VirtualAlloc */
> > static void* win32mmap(size_t size) {
> > void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT,
> > PAGE_READWRITE);
> > return (ptr != 0)? ptr: MFAIL;
> > }
> >
> > /* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
> > static void* win32direct_mmap(size_t size) {
> > void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
> > PAGE_READWRITE);
> > return (ptr != 0)? ptr: MFAIL;
> > }
> >
> > /* This function supports releasing coalesed segments */
> > static int win32munmap(void* ptr, size_t size) {
> > MEMORY_BASIC_INFORMATION minfo;
> > char* cptr = (char*)ptr; /* NOTE: Harbour fix for MSVC C++ mode
> > compile error. Also fixed in dlmalloc 2.8.4b. [vszakats] */
> > while (size) {
> > if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0)
> > return -1;
> > if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr ||
> > minfo.State != MEM_COMMIT || minfo.RegionSize > size)
> > return -1;
> > if (VirtualFree(cptr, 0, MEM_RELEASE) == 0)
> > return -1;
> > cptr += minfo.RegionSize;
> > size -= minfo.RegionSize;
> > }
> > return 0;
> > }
> >
> > #define CALL_MMAP(s) win32mmap(s)
> > #define CALL_MUNMAP(a, s) win32munmap((a), (s))
> > #define DIRECT_MMAP(s) win32direct_mmap(s)
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour