Ignore:
Timestamp:
Jun 21, 2001, 11:07:54 PM (24 years ago)
Author:
sandervl
Message:

semaphore updates

File:
1 edited

Legend:

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

    r6049 r6060  
    1 /* $Id: hmevent.cpp,v 1.5 2001-06-19 10:50:24 sandervl Exp $ */
     1/* $Id: hmevent.cpp,v 1.6 2001-06-21 21:07:53 sandervl Exp $ */
    22
    33/*
     
    3232#ifdef USE_OS2SEMAPHORES
    3333#define INCL_DOSSEMAPHORES
     34#define INCL_DOSERRORS
    3435#include <os2wrap.h>
    3536#include <win32type.h>
     
    111112  //unblocked and the app must manually reset the event semaphore
    112113  //Automatic reset -> only one waiting thread unblocked & state reset
    113   rc = DosCreateEventSem(lpszEventName, &hev, (fManualReset) ? 0 : DCE_POSTONE, fInitialState);
     114  rc = DosCreateEventSem(lpszEventName, &hev, (fManualReset) ? 0 : (DCE_POSTONE|DCE_AUTORESET), fInitialState);
    114115
    115116  if(rc) {
     
    292293#endif
    293294
     295#ifdef USE_OS2SEMAPHORES
     296/*****************************************************************************
     297 * Name      : DWORD HMDeviceEventClass::WaitForSingleObject
     298 * Purpose   : object synchronization
     299 * Parameters: PHMHANDLEDATA pHMHandleData
     300 *             DWORD dwTimeout
     301 * Variables :
     302 * Result    : API returncode
     303 * Remark    :
     304 * Status    :
     305 *
     306 * Author    : SvL
     307 *****************************************************************************/
     308
     309DWORD HMDeviceEventClass::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,
     310                                              DWORD         dwTimeout)
     311{
     312 DWORD rc;
     313
     314  dprintf2(("KERNEL32: HMDeviceEventClass::WaitForSingleObject(%08xh %08xh)",
     315            pHMHandleData->hHMHandle, dwTimeout));
     316
     317  if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )
     318  {
     319      dprintf(("ERROR: Access denied!!"));
     320      SetLastError(ERROR_ACCESS_DENIED_W);
     321      return WAIT_FAILED_W;
     322  }
     323
     324  rc = DosWaitEventSem(pHMHandleData->hHMHandle, dwTimeout);
     325  if(rc && rc != ERROR_INTERRUPT && rc != ERROR_TIMEOUT && rc != ERROR_SEM_OWNER_DIED) {
     326      dprintf(("DosWaitEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));
     327      SetLastError(error2WinError(rc));
     328      return WAIT_FAILED_W;
     329  }
     330  SetLastError(ERROR_SUCCESS_W);
     331  if(rc == ERROR_INTERRUPT || rc == ERROR_SEM_OWNER_DIED) {
     332      return WAIT_ABANDONED_W;
     333  }
     334  else
     335  if(rc == ERROR_TIMEOUT) {
     336      return WAIT_TIMEOUT_W;
     337  }
     338  return WAIT_OBJECT_0_W;
     339}
     340#endif
     341
     342#ifdef USE_OS2SEMAPHORES
     343/*****************************************************************************
     344 * Name      : DWORD HMDeviceEventClass::WaitForSingleObjectEx
     345 * Purpose   : object synchronization
     346 * Parameters: PHMHANDLEDATA pHMHandleData
     347 *             DWORD dwTimeout
     348 *             BOOL  fAlertable
     349 * Variables :
     350 * Result    : API returncode
     351 * Remark    :
     352 * Status    :
     353 *
     354 * Author    : SvL
     355 *****************************************************************************/
     356
     357DWORD HMDeviceEventClass::WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
     358                                                DWORD         dwTimeout,
     359                                                BOOL          fAlertable)
     360{
     361  dprintf2(("KERNEL32: HMDeviceEventClass::WaitForSingleObjectEx(%08xh,%08h,%08xh) not implemented correctly.\n",
     362            pHMHandleData->hHMHandle, dwTimeout, fAlertable));
     363
     364  if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )
     365  {
     366      dprintf(("ERROR: Access denied!!"));
     367      SetLastError(ERROR_ACCESS_DENIED_W);
     368      return WAIT_FAILED_W;
     369  }
     370
     371  return WaitForSingleObject(pHMHandleData, dwTimeout);
     372}
     373#endif
     374
     375#ifdef USE_OS2SEMAPHORES
     376/*****************************************************************************
     377 * Name      : BOOL HMDeviceEventClass::MsgWaitForMultipleObjects
     378 * Purpose   :
     379 * Variables :
     380 * Result    :
     381 * Remark    :
     382 * Status    :
     383 *
     384 * Author    : SvL
     385 *****************************************************************************/
     386DWORD HMDeviceEventClass::MsgWaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,
     387                                                    DWORD      nCount,
     388                                                    PHANDLE    pHandles,
     389                                                    BOOL       fWaitAll,
     390                                                    DWORD      dwMilliseconds,
     391                                                    DWORD      dwWakeMask)
     392{
     393    dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::MsgWaitForMultipleObjects %08x %d %x %d %d %x",
     394              pHMHandleData->hHMHandle, nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask));
     395
     396    if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )
     397    {
     398        dprintf(("ERROR: Access denied!!"));
     399        SetLastError(ERROR_ACCESS_DENIED_W);
     400        return WAIT_FAILED_W;
     401    }
     402
     403    return WAIT_FAILED_W;
     404}
     405#endif
     406
     407#ifdef USE_OS2SEMAPHORES
     408/*****************************************************************************
     409 * Name      : BOOL HMDeviceHandler::WaitForMultipleObjects
     410 * Purpose   :
     411 * Variables :
     412 * Result    :
     413 * Remark    :
     414 * Status    :
     415 *
     416 * Author    : SvL
     417 *****************************************************************************/
     418DWORD HMDeviceEventClass::WaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,
     419                                                 DWORD   cObjects,
     420                                                 PHANDLE lphObjects,
     421                                                 BOOL    fWaitAll,
     422                                                 DWORD   dwTimeout)
     423{
     424    dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::WaitForMultipleObjects %08x %d %x %d %x",
     425              pHMHandleData->hHMHandle, cObjects, lphObjects, fWaitAll, dwTimeout));
     426
     427    if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )
     428    {
     429        dprintf(("ERROR: Access denied!!"));
     430        SetLastError(ERROR_ACCESS_DENIED_W);
     431        return WAIT_FAILED_W;
     432    }
     433
     434    return WAIT_FAILED_W;
     435}
     436#endif
     437
    294438/*****************************************************************************
    295439 * Name      : HMSetEvent
Note: See TracChangeset for help on using the changeset viewer.