Changeset 9748 for trunk/src/kernel32/hmmutex.cpp
- Timestamp:
- Feb 4, 2003, 12:29:03 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmmutex.cpp
r6084 r9748 1 /* $Id: hmmutex.cpp,v 1. 7 2001-06-23 16:59:28 sandervl Exp $ */1 /* $Id: hmmutex.cpp,v 1.8 2003-02-04 11:28:58 sandervl Exp $ */ 2 2 3 3 /* … … 29 29 *****************************************************************************/ 30 30 31 #ifdef USE_OS2SEMAPHORES32 #define INCL_DOSSEMAPHORES33 #define INCL_DOSERRORS34 #include <os2wrap.h>35 #include <win32type.h>36 #include <win32api.h>37 #include <winconst.h>38 #else39 31 #include <os2win.h> 40 #endif41 32 #include <stdlib.h> 42 33 #include <string.h> … … 82 73 LPCTSTR lpszMutexName) 83 74 { 84 #ifdef USE_OS2SEMAPHORES85 APIRET rc;86 HMTX htmx;87 char szSemName[CCHMAXPATH];88 89 dprintf(("KERNEL32: HandleManager::Mutex::CreateMutex(%08xh,%08xh,%08xh,%s)\n",90 pHMHandleData,91 lpsa,92 fInitialOwner,93 lpszMutexName));94 95 if(lpszMutexName) {96 strcpy(szSemName, "\\SEM32\\");97 strcat(szSemName, lpszMutexName);98 lpszMutexName = szSemName;99 FixSemName((char *)lpszMutexName);100 }101 rc = DosCreateMutexSem(lpszMutexName, &htmx, 0, fInitialOwner);102 103 if(rc) {104 dprintf(("DosCreateMutexSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));105 pHMHandleData->hHMHandle = 0;106 return error2WinError(rc);107 }108 pHMHandleData->dwAccess = MUTEX_ALL_ACCESS_W;109 pHMHandleData->hHMHandle = htmx;110 pHMHandleData->dwInternalType = HMTYPE_MUTEXSEM;111 return ERROR_SUCCESS_W;112 #else113 75 HANDLE hOpen32; 114 76 … … 129 91 } 130 92 else 131 return (O32_GetLastError()); 132 #endif 93 return (GetLastError()); 133 94 } 134 95 … … 150 111 LPCTSTR lpszMutexName) 151 112 { 152 #ifdef USE_OS2SEMAPHORES153 HMTX hmtx;154 APIRET rc;155 char szSemName[CCHMAXPATH];156 157 dprintf(("KERNEL32: HandleManager::Mutex::OpenMutex(%08xh,%08xh,%s)\n",158 pHMHandleData,159 fInheritHandle,160 lpszMutexName));161 162 if(lpszMutexName == NULL) {163 pHMHandleData->hHMHandle = 0;164 return ERROR_INVALID_PARAMETER_W;165 }166 167 strcpy(szSemName, "\\SEM32\\");168 strcat(szSemName, lpszMutexName);169 FixSemName(szSemName);170 rc = DosOpenMutexSem(szSemName, &hmtx);171 if(rc) {172 dprintf(("DosOpenMutexSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));173 pHMHandleData->hHMHandle = 0;174 return error2WinError(rc);175 }176 pHMHandleData->hHMHandle = hmtx;177 pHMHandleData->dwInternalType = HMTYPE_MUTEXSEM;178 return ERROR_SUCCESS_W;179 #else180 113 HANDLE hOpen32; 181 114 … … 195 128 } 196 129 else 197 return (O32_GetLastError()); 198 #endif 130 return (GetLastError()); 199 131 } 200 201 /*****************************************************************************202 * Name : HMDeviceMutexClass::CloseHandle203 * Purpose : close the handle204 * Parameters: PHMHANDLEDATA pHMHandleData205 * Variables :206 * Result : API returncode207 * Remark :208 * Status :209 *210 * Author :211 *****************************************************************************/212 213 #ifdef USE_OS2SEMAPHORES214 BOOL HMDeviceMutexClass::CloseHandle(PHMHANDLEDATA pHMHandleData)215 {216 APIRET rc;217 218 if(pHMHandleData->hHMHandle) {219 rc = DosCloseMutexSem((HEV)pHMHandleData->hHMHandle);220 if(rc) {221 dprintf(("DosCloseMutexSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));222 SetLastError(error2WinError(rc));223 return FALSE;224 }225 }226 return TRUE;227 }228 #endif229 230 /*****************************************************************************231 * Name : HMDeviceMutexClass::DuplicateHandle232 * Purpose :233 * Parameters:234 * various parameters as required235 * Variables :236 * Result :237 * Remark : the standard behaviour is to return an error code for non-238 * existant request codes239 * Status :240 *241 * Author :242 *****************************************************************************/243 #ifdef USE_OS2SEMAPHORES244 BOOL HMDeviceMutexClass::DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,245 PHMHANDLEDATA pHMSrcHandle,246 HANDLE destprocess,247 PHANDLE desthandle,248 DWORD fdwAccess,249 BOOL fInherit,250 DWORD fdwOptions,251 DWORD fdwOdinOptions)252 {253 APIRET rc;254 HMTX hmtx;255 256 dprintf(("KERNEL32:HandleManager::DuplicateHandle %s(%08x,%08x,%08x,%08x,%08x) - NOT IMPLEMENTED!!!!!!!!\n",257 lpHMDeviceName,258 pHMHandleData,259 srcprocess, pHMSrcHandle, destprocess, desthandle));260 261 if(srcprocess != destprocess) {262 DebugInt3();263 SetLastError(ERROR_ACCESS_DENIED_W);264 return FALSE;265 }266 hmtx = (HMTX)pHMSrcHandle->hHMHandle;267 rc = DosOpenMutexSem(NULL, &hmtx);268 if(rc) {269 dprintf(("DosOpenMutexSem %x failed with rc %d", pHMSrcHandle->hHMHandle, rc));270 pHMHandleData->hHMHandle = 0;271 SetLastError(error2WinError(rc));272 return FALSE;273 }274 pHMHandleData->dwAccess = fdwAccess;275 pHMHandleData->hHMHandle = hmtx;276 pHMHandleData->dwInternalType = HMTYPE_MUTEXSEM;277 SetLastError(ERROR_SUCCESS_W);278 return TRUE;279 }280 #endif281 282 283 #ifdef USE_OS2SEMAPHORES284 /*****************************************************************************285 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObject286 * Purpose : object synchronization287 * Parameters: PHMHANDLEDATA pHMHandleData288 * DWORD dwTimeout289 * Variables :290 * Result : API returncode291 * Remark :292 * Status :293 *294 * Author : Patrick Haller [Wed, 1999/06/17 20:44]295 *****************************************************************************/296 297 DWORD HMDeviceMutexClass::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,298 DWORD dwTimeout)299 {300 DWORD rc;301 302 dprintf2(("KERNEL32: HMDeviceMutexClass::WaitForSingleObject(%08xh %08xh)",303 pHMHandleData->hHMHandle, dwTimeout));304 305 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )306 {307 dprintf(("ERROR: Access denied!!"));308 SetLastError(ERROR_ACCESS_DENIED_W);309 return FALSE;310 }311 312 rc = DosRequestMutexSem(pHMHandleData->hHMHandle, dwTimeout);313 if(rc && rc != ERROR_INTERRUPT && rc != ERROR_TIMEOUT && rc != ERROR_SEM_OWNER_DIED) {314 dprintf(("DosWaitEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));315 SetLastError(error2WinError(rc));316 return WAIT_FAILED_W;317 }318 SetLastError(ERROR_SUCCESS_W);319 if(rc == ERROR_INTERRUPT || rc == ERROR_SEM_OWNER_DIED) {320 return WAIT_ABANDONED_W;321 }322 else323 if(rc == ERROR_TIMEOUT) {324 return WAIT_TIMEOUT_W;325 }326 return WAIT_OBJECT_0_W;327 }328 #endif329 330 #ifdef USE_OS2SEMAPHORES331 /*****************************************************************************332 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObjectEx333 * Purpose : object synchronization334 * Parameters: PHMHANDLEDATA pHMHandleData335 * DWORD dwTimeout336 * BOOL fAlertable337 * Variables :338 * Result : API returncode339 * Remark :340 * Status :341 *342 * Author : Patrick Haller [Wed, 1999/06/17 20:44]343 *****************************************************************************/344 345 DWORD HMDeviceMutexClass::WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,346 DWORD dwTimeout,347 BOOL fAlertable)348 {349 dprintf2(("KERNEL32: HMDeviceMutexClass::WaitForSingleObjectEx(%08xh,%08h,%08xh) not implemented correctly.\n",350 pHMHandleData->hHMHandle, dwTimeout, fAlertable));351 352 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) )353 {354 dprintf(("ERROR: Access denied!!"));355 SetLastError(ERROR_ACCESS_DENIED_W);356 return WAIT_FAILED_W;357 }358 359 return WaitForSingleObject(pHMHandleData, dwTimeout);360 }361 #endif362 363 #ifdef USE_OS2SEMAPHORES364 /*****************************************************************************365 * Name : BOOL HMDeviceMutexClass::MsgWaitForMultipleObjects366 * Purpose :367 * Variables :368 * Result :369 * Remark :370 * Status :371 *372 * Author : SvL373 *****************************************************************************/374 DWORD HMDeviceMutexClass::MsgWaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,375 DWORD nCount,376 PHANDLE pHandles,377 BOOL fWaitAll,378 DWORD dwMilliseconds,379 DWORD dwWakeMask)380 {381 return HMSemMsgWaitForMultipleObjects(nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask);382 }383 #endif384 385 #ifdef USE_OS2SEMAPHORES386 /*****************************************************************************387 * Name : BOOL HMDeviceMutexClass::WaitForMultipleObjects388 * Purpose :389 * Variables :390 * Result :391 * Remark :392 * Status :393 *394 * Author : SvL395 *****************************************************************************/396 DWORD HMDeviceMutexClass::WaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,397 DWORD cObjects,398 PHANDLE lphObjects,399 BOOL fWaitAll,400 DWORD dwTimeout)401 {402 return HMSemWaitForMultipleObjects(cObjects, lphObjects, fWaitAll, dwTimeout);403 }404 #endif405 132 406 133 /***************************************************************************** … … 418 145 BOOL HMDeviceMutexClass::ReleaseMutex(PHMHANDLEDATA pHMHandleData) 419 146 { 420 #ifdef USE_OS2SEMAPHORES421 APIRET rc;422 423 dprintf(("KERNEL32: HandleManager::Mutex::ReleaseMutex(%08xh)\n",424 pHMHandleData->hHMHandle));425 426 rc = DosReleaseMutexSem(pHMHandleData->hHMHandle);427 if(rc) {428 dprintf(("DosReleaseMutexSem %x failed with rc %d", pHMHandleData->hHMHandle, rc));429 SetLastError(error2WinError(rc));430 return FALSE;431 }432 SetLastError(ERROR_SUCCESS_W);433 return TRUE;434 #else435 147 dprintf(("KERNEL32: HandleManager::Mutex::ReleaseMutex(%08xh)\n", 436 148 pHMHandleData->hHMHandle)); 437 149 438 150 return (O32_ReleaseMutex(pHMHandleData->hHMHandle)); 439 #endif440 151 } 441 152
Note:
See TracChangeset
for help on using the changeset viewer.