Ignore:
Timestamp:
Sep 16, 2002, 3:58:25 PM (23 years ago)
Author:
sandervl
Message:

Statistics fixes & print leaked gdi handles when unloaded; don't recycle gdi handles too soon

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gdi32/objhandle.cpp

    r8995 r9251  
    1 /* $Id: objhandle.cpp,v 1.27 2002-08-13 14:45:37 sandervl Exp $ */
     1/* $Id: objhandle.cpp,v 1.28 2002-09-16 13:58:25 sandervl Exp $ */
    22/*
    33 * Win32 Handle Management Code for OS/2
     
    5252BOOL WIN32API ObjAllocateHandle(HANDLE *hObject, DWORD dwUserData, DWORD dwType)
    5353{
     54    DWORD oldlowestidx;
     55
    5456    objTableMutex.enter();
    5557    if(objHandleTable == NULL) {
     
    7981    objHandleTable[lowestFreeIndex].dwGDI32Data = 0;
    8082    objHandleTable[lowestFreeIndex].dwFlags     = 0;
     83
     84    oldlowestidx = lowestFreeIndex+1;
     85
    8186    lowestFreeIndex = -1;
    8287
    8388    //find next free handle
    84     for(int i=0;i<MAX_OBJECT_HANDLES;i++) {
     89findhandle:
     90    for(int i=oldlowestidx;i<MAX_OBJECT_HANDLES;i++) {
    8591        if(objHandleTable[i].dwUserData == 0) {
    8692            lowestFreeIndex = i;
     
    8894        }
    8995    }
     96    if(lowestFreeIndex == -1) {
     97        oldlowestidx = 0; //search from the start
     98        goto findhandle;
     99    }
    90100    objTableMutex.leave();
    91101    return TRUE;
     
    102112            objHandleTable[hObject].dwUserData = 0;
    103113            objHandleTable[hObject].dwType     = HNDL_NONE;
    104             if(lowestFreeIndex == -1 || hObject < lowestFreeIndex)
     114////            if(lowestFreeIndex == -1 || hObject < lowestFreeIndex)
     115            if(lowestFreeIndex == -1)
    105116                lowestFreeIndex = hObject;
    106117        }
     
    489500        return TRUE;
    490501    }   
    491     STATS_DeleteObject(hObj, objtype);
     502    STATS_DeleteObject(hObj, GetObjectType(hObj));
    492503
    493504    if(ObjQueryHandleType(hObj) == HNDL_REGION)
Note: See TracChangeset for help on using the changeset viewer.