Changeset 9336 for trunk/src


Ignore:
Timestamp:
Oct 8, 2002, 11:49:08 AM (23 years ago)
Author:
sandervl
Message:

Updates for shared critical sections

Location:
trunk/src/odincrt
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/odincrt/critsect.cpp

    r9331 r9336  
    1 /* $Id: critsect.cpp,v 1.6 2002-10-07 16:28:13 sandervl Exp $ */
     1/* $Id: critsect.cpp,v 1.7 2002-10-08 09:49:06 sandervl Exp $ */
    22/*
    33 * Critical sections in the Win32 sense
     
    7272 *           DosInitializeCriticalSection
    7373 */
    74 ULONG WIN32API DosInitializeCriticalSection(CRITICAL_SECTION_OS2 *crit, PSZ pszSemName)
     74ULONG WIN32API DosInitializeCriticalSection(CRITICAL_SECTION_OS2 *crit,
     75                                            PSZ pszSemName, BOOL fShared)
    7576{
    7677    APIRET rc;
     
    8182    crit->OwningThread   = 0;
    8283
    83     rc = DosCreateEventSem(pszSemName, &crit->hmtxLock, (pszSemName) ? DC_SEM_SHARED : 0, 0);
     84    rc = DosCreateEventSem(pszSemName, &crit->hmtxLock, (pszSemName || fShared) ? DC_SEM_SHARED : 0, 0);
    8485    if(rc != NO_ERROR) {
    8586        DebugInt3();
     
    8788        return rc;
    8889    }
     90    crit->CreationCount  = 1;
    8991    crit->Reserved       = GetCurrentProcessId();
    9092    return NO_ERROR;
     
    9597 *           DosAccessCriticalSection
    9698 */
    97 ULONG WIN32API DosAccessCriticalSection(CRITICAL_SECTION_OS2 *, PSZ pszSemName)
     99ULONG WIN32API DosAccessCriticalSection(CRITICAL_SECTION_OS2 *crit, PSZ pszSemName)
    98100{
    99101    HMTX   hmtxLock = 0;
    100102    APIRET rc;
    101103
     104    if(pszSemName == NULL && crit->hmtxLock == 0) {
     105        DebugInt3();
     106        return ERROR_INVALID_PARAMETER;
     107    }
    102108    if(pszSemName == NULL) {
    103         DebugInt3();
    104         return ERROR_INVALID_PARAMETER;
     109        hmtxLock = crit->hmtxLock;
    105110    }
    106111
     
    110115        return rc;
    111116    }
     117    DosInterlockedIncrement(&crit->CreationCount);
    112118    return NO_ERROR;
    113119}
     
    123129           DebugInt3();
    124130        }
    125         crit->LockCount      = -1;
    126         crit->RecursionCount = 0;
    127         crit->OwningThread   = 0;
    128131        DosCloseEventSem(crit->hmtxLock);
    129         crit->hmtxLock       = 0;
    130         crit->Reserved       = (DWORD)-1;
     132        if(DosInterlockedDecrement(&crit->CreationCount) == 0)
     133        {
     134            crit->LockCount      = -1;
     135            crit->RecursionCount = 0;
     136            crit->OwningThread   = 0;
     137            crit->hmtxLock       = 0;
     138            crit->Reserved       = (DWORD)-1;
     139        }
    131140    }
    132141    return NO_ERROR;
  • trunk/src/odincrt/odin36.def

    r9331 r9336  
    1 ; $Id: odin36.def,v 1.6 2002-10-07 16:28:13 sandervl Exp $
     1; $Id: odin36.def,v 1.7 2002-10-08 09:49:07 sandervl Exp $
    22; Odin VAC++ 3.6.5 shared multithreaded runtime
    33LIBRARY ODINCRT INITINSTANCE TERMINSTANCE
     
    979979    _DosDeleteCriticalSection@4                        @1200 NONAME
    980980    _DosEnterCriticalSection@8                         @1201 NONAME
    981     _DosInitializeCriticalSection@8                    @1202 NONAME
     981    _DosInitializeCriticalSection@12                   @1202 NONAME
    982982    _DosAccessCriticalSection@8                        @1203 NONAME
    983983    _DosLeaveCriticalSection@4                         @1204 NONAME
  • trunk/src/odincrt/odin36d.def

    r9331 r9336  
    1 ; $Id: odin36d.def,v 1.6 2002-10-07 16:28:14 sandervl Exp $
     1; $Id: odin36d.def,v 1.7 2002-10-08 09:49:07 sandervl Exp $
    22; Odin VAC++ 3.6.5 shared multithreaded runtime
    33LIBRARY ODINCRTD INITINSTANCE TERMINSTANCE
     
    987987    _DosDeleteCriticalSection@4                        @1200 NONAME
    988988    _DosEnterCriticalSection@8                         @1201 NONAME
    989     _DosInitializeCriticalSection@8                    @1202 NONAME
     989    _DosInitializeCriticalSection@12                   @1202 NONAME
    990990    _DosAccessCriticalSection@8                        @1203 NONAME
    991991    _DosLeaveCriticalSection@4                         @1204 NONAME
  • trunk/src/odincrt/odincrt.def

    r9331 r9336  
    1 ; $Id: odincrt.def,v 1.26 2002-10-07 16:28:14 sandervl Exp $
     1; $Id: odincrt.def,v 1.27 2002-10-08 09:49:07 sandervl Exp $
    22; Odin VAC++ 3.08 shared multithreaded runtime
    33LIBRARY ODINCRT INITINSTANCE TERMINSTANCE
     
    957957    _DosDeleteCriticalSection@4                        @1200 NONAME
    958958    _DosEnterCriticalSection@8                         @1201 NONAME
    959     _DosInitializeCriticalSection@8                    @1202 NONAME
     959    _DosInitializeCriticalSection@12                   @1202 NONAME
    960960    _DosAccessCriticalSection@8                        @1203 NONAME
    961961    _DosLeaveCriticalSection@4                         @1204 NONAME
  • trunk/src/odincrt/odincrtd.def

    r9331 r9336  
    1 ; $Id: odincrtd.def,v 1.7 2002-10-07 16:28:14 sandervl Exp $
     1; $Id: odincrtd.def,v 1.8 2002-10-08 09:49:08 sandervl Exp $
    22; Odin VAC++ 3.08 shared multithreaded runtime
    33LIBRARY ODINCRTD INITINSTANCE TERMINSTANCE
     
    959959    _DosDeleteCriticalSection@4                        @1200 NONAME
    960960    _DosEnterCriticalSection@8                         @1201 NONAME
    961     _DosInitializeCriticalSection@8                    @1202 NONAME
     961    _DosInitializeCriticalSection@12                   @1202 NONAME
    962962    _DosAccessCriticalSection@8                        @1203 NONAME
    963963    _DosLeaveCriticalSection@4                         @1204 NONAME
  • trunk/src/odincrt/odincrtp.def

    r9331 r9336  
    1 ; $Id: odincrtp.def,v 1.4 2002-10-07 16:28:15 sandervl Exp $
     1; $Id: odincrtp.def,v 1.5 2002-10-08 09:49:08 sandervl Exp $
    22; Odin VAC++ 3.08 shared multithreaded runtime
    33LIBRARY ODINCRTP INITINSTANCE TERMINSTANCE
     
    980980    _DosDeleteCriticalSection@4                        @1200 NONAME
    981981    _DosEnterCriticalSection@8                         @1201 NONAME
    982     _DosInitializeCriticalSection@8                    @1202 NONAME
     982    _DosInitializeCriticalSection@12                   @1202 NONAME
    983983    _DosAccessCriticalSection@8                        @1203 NONAME
    984984    _DosLeaveCriticalSection@4                         @1204 NONAME
Note: See TracChangeset for help on using the changeset viewer.