Ignore:
Timestamp:
Jan 22, 2001, 7:26:52 PM (25 years ago)
Author:
sandervl
Message:

memory map + handle manager fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/mmap.cpp

    r4946 r5011  
    1 /* $Id: mmap.cpp,v 1.48 2001-01-14 17:16:55 sandervl Exp $ */
     1/* $Id: mmap.cpp,v 1.49 2001-01-22 18:26:51 sandervl Exp $ */
    22
    33/*
     
    5555//******************************************************************************
    5656Win32MemMap::Win32MemMap(HFILE hfile, ULONG size, ULONG fdwProtect, LPSTR lpszName)
    57                : nrMappings(0), pMapping(NULL), mMapAccess(0), referenced(0), image(0),
    58                  fClosed(FALSE)
     57               : nrMappings(0), pMapping(NULL), mMapAccess(0), referenced(0), image(0)
    5958{
    6059    globalmapMutex.enter(VMUTEX_WAIT_FOREVER, &hGlobalMapMutex);
     
    7978//******************************************************************************
    8079Win32MemMap::Win32MemMap(Win32PeLdrImage *pImage, ULONG baseAddress, ULONG size)
    81                : nrMappings(0), pMapping(NULL), mMapAccess(0), referenced(0), image(0),
    82                  fClosed(FALSE)
     80               : nrMappings(0), pMapping(NULL), mMapAccess(0), referenced(0), image(0)
    8381{
    8482    globalmapMutex.enter(VMUTEX_WAIT_FOREVER, &hGlobalMapMutex);
     
    10098//******************************************************************************
    10199//******************************************************************************
    102 BOOL Win32MemMap::Init(HANDLE hMemMap)
     100BOOL Win32MemMap::Init()
    103101{
    104102    mapMutex.enter();
     
    138136
    139137    dprintf(("CreateFileMappingA for file %x, prot %x size %d, name %s", hMemFile, mProtFlags, mSize, lpszMapName));
    140     this->hMemMap = hMemMap;
    141138    mapMutex.leave();
    142139    return TRUE;
     
    195192//it's handle is closed
    196193//******************************************************************************
    197 void Win32MemMap::close()
     194void Win32MemMap::Release()
    198195{
    199196#ifdef DEBUG
    200     dprintf(("Win32MemMap::close %s", lpszMapName));
     197    dprintf(("Win32MemMap::Release %s (%d)", lpszMapName, referenced-1));
    201198#endif
    202     fClosed = TRUE;
    203     if(nrMappings == 0) {
     199    --referenced;
     200    if(nrMappings == 0 && referenced == 0) {
    204201        delete this;
    205202    }
     
    327324    //if there are no more mappings left and the memory map's handle has been
    328325    //closed, then delete the object
    329     if(nrMappings == 0 && fClosed) {
     326    if(nrMappings == 0 && referenced == 0) {
    330327        delete this;
    331328    }
     
    333330fail:
    334331    mapMutex.leave();
    335     if(nrMappings == 0 && fClosed) {
     332    if(nrMappings == 0 && referenced == 0) {
    336333        delete this;
    337334    }
     
    568565        }
    569566        else {
    570             if(!map->isClosed())
    571                  CloseHandle(memmaps->hMemMap);
    572             else delete map;
     567            delete map;
    573568        }
    574569    }
Note: See TracChangeset for help on using the changeset viewer.