- Timestamp:
- Jun 23, 2001, 6:59:28 PM (24 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r6079 r6084 1 /* $Id: HandleManager.cpp,v 1.6 7 2001-06-23 07:45:42sandervl Exp $ */1 /* $Id: HandleManager.cpp,v 1.68 2001-06-23 16:59:26 sandervl Exp $ */ 2 2 3 3 /* … … 609 609 return (NO_ERROR); 610 610 } 611 611 //***************************************************************************** 612 //***************************************************************************** 613 PHMHANDLEDATA HMQueryHandleData(HANDLE handle) 614 { 615 int iIndex; 616 617 iIndex = _HMHandleQuery(handle); /* get the index */ 618 if (-1 == iIndex) /* error ? */ 619 { 620 return NULL; 621 } 622 return &TabWin32Handles[iIndex].hmHandleData; /* call device handler */ 623 } 612 624 613 625 /***************************************************************************** … … 2883 2895 return HMWaitForSingleObject(*lphObjects, dwTimeout); 2884 2896 } 2897 2898 if(cObjects > MAXIMUM_WAIT_OBJECTS) { 2899 dprintf(("KERNEL32: HMWaitForMultipleObjects: Too many objects (%d)", cObjects)); 2900 SetLastError(ERROR_INVALID_PARAMETER); 2901 return WAIT_FAILED; 2902 } 2903 2885 2904 /* validate handle */ 2886 2905 iIndex = _HMHandleQuery(*lphObjects); /* get the index */ … … 3014 3033 dprintf(("WANRING: HMWaitForMultipleObjects: unknown handle passed on to Open32 -> will not work if other handles are semaphores")); 3015 3034 return O32_MsgWaitForMultipleObjects(cObjects, lphObjects, fWaitAll, dwTimeout, dwWakeMask); 3035 } 3036 3037 if(cObjects > MAXIMUM_WAIT_OBJECTS) { 3038 dprintf(("KERNEL32: HMMsgWaitForMultipleObjects: Too many objects (%d)", cObjects)); 3039 SetLastError(ERROR_INVALID_PARAMETER); 3040 return WAIT_FAILED; 3016 3041 } 3017 3042 -
trunk/src/kernel32/hmdevice.h
r6069 r6084 1 /* $Id: hmdevice.h,v 1.2 8 2001-06-22 19:40:27 sandervl Exp $ */1 /* $Id: hmdevice.h,v 1.29 2001-06-23 16:59:27 sandervl Exp $ */ 2 2 3 3 /* … … 59 59 } HMHANDLEDATA, *PHMHANDLEDATA; 60 60 61 PHMHANDLEDATA HMQueryHandleData(HANDLE handle); 61 62 62 63 -
trunk/src/kernel32/hmevent.cpp
r6069 r6084 1 /* $Id: hmevent.cpp,v 1. 7 2001-06-22 19:40:28sandervl Exp $ */1 /* $Id: hmevent.cpp,v 1.8 2001-06-23 16:59:27 sandervl Exp $ */ 2 2 3 3 /* … … 48 48 #include "HandleManager.H" 49 49 #include "HMEvent.h" 50 #include "HMSemaphore.h" 50 51 #include "oslibdos.h" 51 52 … … 108 109 strcat(szSemName, lpszEventName); 109 110 lpszEventName = szSemName; 111 FixSemName((char *)lpszEventName); 110 112 } 111 113 //Manual reset means all threads waiting on the event semaphore will be … … 183 185 strcpy(szSemName, "\\SEM32\\"); 184 186 strcat(szSemName, lpszEventName); 187 FixSemName(szSemName); 185 188 rc = DosOpenEventSem(szSemName, &hev); 186 189 if(rc) { … … 394 397 DWORD dwWakeMask) 395 398 { 396 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::MsgWaitForMultipleObjects %08x %d %x %d %d %x", 397 pHMHandleData->hHMHandle, nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask)); 398 399 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 400 { 401 dprintf(("ERROR: Access denied!!")); 402 SetLastError(ERROR_ACCESS_DENIED_W); 403 return WAIT_FAILED_W; 404 } 405 406 return WAIT_FAILED_W; 399 return HMSemMsgWaitForMultipleObjects(nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask); 407 400 } 408 401 #endif … … 425 418 DWORD dwTimeout) 426 419 { 427 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::WaitForMultipleObjects %08x %d %x %d %x", 428 pHMHandleData->hHMHandle, cObjects, lphObjects, fWaitAll, dwTimeout)); 429 430 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 431 { 432 dprintf(("ERROR: Access denied!!")); 433 SetLastError(ERROR_ACCESS_DENIED_W); 434 return WAIT_FAILED_W; 435 } 436 437 return WAIT_FAILED_W; 420 return HMSemWaitForMultipleObjects(cObjects, lphObjects, fWaitAll, dwTimeout); 438 421 } 439 422 #endif … … 467 450 468 451 rc = DosPostEventSem(pHMHandleData->hHMHandle); 469 if(rc ) {452 if(rc && rc != ERROR_ALREADY_POSTED) { 470 453 dprintf(("DosPostEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc)); 471 454 SetLastError(error2WinError(rc)); … … 512 495 513 496 rc = DosPostEventSem(pHMHandleData->hHMHandle); 514 if(rc ) {497 if(rc && rc != ERROR_ALREADY_POSTED) { 515 498 dprintf(("DosPostEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc)); 516 499 SetLastError(error2WinError(rc)); … … 519 502 if(pHMHandleData->dwFlags == TRUE) {//fManualReset 520 503 rc = DosResetEventSem(pHMHandleData->hHMHandle, &count); 521 if(rc ) {504 if(rc && rc != ERROR_ALREADY_RESET) { 522 505 dprintf(("DosResetEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc)); 523 506 SetLastError(error2WinError(rc)); … … 565 548 566 549 rc = DosResetEventSem(pHMHandleData->hHMHandle, &count); 567 if(rc ) {550 if(rc && rc != ERROR_ALREADY_RESET) { 568 551 dprintf(("DosResetEventSem %x failed with rc %d", pHMHandleData->hHMHandle, rc)); 569 552 SetLastError(error2WinError(rc)); -
trunk/src/kernel32/hmmutex.cpp
r6069 r6084 1 /* $Id: hmmutex.cpp,v 1. 6 2001-06-22 19:40:28 sandervl Exp $ */1 /* $Id: hmmutex.cpp,v 1.7 2001-06-23 16:59:28 sandervl Exp $ */ 2 2 3 3 /* … … 47 47 #include "HandleManager.H" 48 48 #include "HMMutex.h" 49 #include "HMSemaphore.h" 49 50 50 51 #define DBG_LOCALLOG DBG_hmmutex … … 96 97 strcat(szSemName, lpszMutexName); 97 98 lpszMutexName = szSemName; 99 FixSemName((char *)lpszMutexName); 98 100 } 99 101 rc = DosCreateMutexSem(lpszMutexName, &htmx, 0, fInitialOwner); … … 165 167 strcpy(szSemName, "\\SEM32\\"); 166 168 strcat(szSemName, lpszMutexName); 169 FixSemName(szSemName); 167 170 rc = DosOpenMutexSem(szSemName, &hmtx); 168 171 if(rc) { … … 376 379 DWORD dwWakeMask) 377 380 { 378 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::MsgWaitForMultipleObjects %08x %d %x %d %d %x", 379 pHMHandleData->hHMHandle, nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask)); 380 381 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 382 { 383 dprintf(("ERROR: Access denied!!")); 384 SetLastError(ERROR_ACCESS_DENIED_W); 385 return WAIT_FAILED_W; 386 } 387 return WAIT_FAILED_W; 381 return HMSemMsgWaitForMultipleObjects(nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask); 388 382 } 389 383 #endif … … 406 400 DWORD dwTimeout) 407 401 { 408 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::WaitForMultipleObjects %08x %d %x %d %x", 409 pHMHandleData->hHMHandle, cObjects, lphObjects, fWaitAll, dwTimeout)); 410 411 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 412 { 413 dprintf(("ERROR: Access denied!!")); 414 SetLastError(ERROR_ACCESS_DENIED_W); 415 return WAIT_FAILED_W; 416 } 417 return WAIT_FAILED_W; 402 return HMSemWaitForMultipleObjects(cObjects, lphObjects, fWaitAll, dwTimeout); 418 403 } 419 404 #endif -
trunk/src/kernel32/hmsemaphore.cpp
r6079 r6084 1 /* $Id: hmsemaphore.cpp,v 1. 7 2001-06-23 07:45:43sandervl Exp $ */1 /* $Id: hmsemaphore.cpp,v 1.8 2001-06-23 16:59:28 sandervl Exp $ */ 2 2 3 3 /* … … 34 34 #define INCL_DOSSEMAPHORES 35 35 #define INCL_DOSERRORS 36 #define INCL_WIN 36 37 #include <os2wrap.h> 37 38 #include <win32type.h> … … 63 64 #endif 64 65 65 #ifdef USE_OS2SEMAPHORES66 typedef struct {67 LONG currentCount;68 LONG maximumCount;69 LONG refCount;70 HEV hev;71 } SEM_INFO, *PSEM_INFO;72 #endif73 74 66 /***************************************************************************** 75 67 * Defines * … … 125 117 strcat(szSemName, lpszSemaphoreName); 126 118 lpszSemaphoreName = szSemName; 119 FixSemName((char *)lpszSemaphoreName); 127 120 } 128 121 rc = DosCreateEventSem(lpszSemaphoreName, &hev, DCE_POSTONE, lInitialCount); … … 202 195 strcpy(szSemName, "\\SEM32\\"); 203 196 strcat(szSemName, lpszSemaphoreName); 197 FixSemName(szSemName); 204 198 rc = DosOpenEventSem(szSemName, &hev); 205 199 if(rc) { … … 418 412 DWORD dwWakeMask) 419 413 { 420 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::MsgWaitForMultipleObjects %08x %d %x %d %d %x", 421 pHMHandleData->hHMHandle, nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask)); 422 423 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 424 { 425 dprintf(("ERROR: Access denied!!")); 426 SetLastError(ERROR_ACCESS_DENIED_W); 414 return HMSemMsgWaitForMultipleObjects(nCount, pHandles, fWaitAll, dwMilliseconds, dwWakeMask); 415 } 416 417 DWORD HMSemMsgWaitForMultipleObjects(DWORD cObjects, 418 PHANDLE lphObjects, 419 BOOL fWaitAll, 420 DWORD dwTimeout, 421 DWORD dwWakeMask) 422 { 423 PHMHANDLEDATA *pHandles; 424 HMUX hmux; 425 PSEMRECORD pSemRec; 426 int i, j; 427 APIRET rc; 428 ULONG ulUser; 429 static HMODULE hUser32 = 0; 430 static BOOL (* WINAPI pfnPeekMessageA)(LPMSG,HWND,UINT,UINT,UINT); 431 432 dprintf(("KERNEL32: WaitForMultipleObjects %d %x %d %x", 433 cObjects, lphObjects, fWaitAll, dwTimeout)); 434 435 if(pfnPeekMessageA == NULL) { 436 hUser32 = LoadLibraryA("USER32.DLL"); 437 *(FARPROC *)&pfnPeekMessageA = GetProcAddress(hUser32,"PeekMessageA"); 438 } 439 440 if(cObjects == 1) { 441 //Can't use DosCreateMuxWaitSem here (will return error 292) 442 PHMHANDLEDATA pHandle = HMQueryHandleData(lphObjects[0]); 443 if(pHandle == NULL) { 444 return WAIT_FAILED_W; 445 } 446 if(!(pHandle->dwAccess & SYNCHRONIZE_W) ) 447 { 448 dprintf(("ERROR: Access denied (handle %x, index 0)!!", lphObjects[0])); 449 SetLastError(ERROR_ACCESS_DENIED_W); 450 return WAIT_FAILED_W; 451 } 452 453 switch(pHandle->dwInternalType) { 454 case HMTYPE_SEMAPHORE: 455 { 456 PSEM_INFO pSemInfo = (PSEM_INFO)pHandle->hHMHandle; 457 458 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle 0: ODIN-%08xh, OS/2-%08xh", 459 lphObjects[0], pSemInfo->hev)); 460 if(InterlockedDecrement(&pSemInfo->currentCount) >= 0) { 461 return WAIT_OBJECT_0_W; 462 } 463 rc = WinWaitEventSem(pSemInfo->hev, dwTimeout); 464 break; 465 } 466 case HMTYPE_EVENTSEM: 467 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle 0: ODIN-%08xh, OS/2-%08xh", 468 lphObjects[0], pHandle->hHMHandle)); 469 rc = WinWaitEventSem((HEV)pHandle->hHMHandle, dwTimeout); 470 break; 471 case HMTYPE_MUTEXSEM: 472 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle %3i: ODIN-%08xh, OS/2-%08xh", 473 lphObjects[0], pHandle->hHMHandle)); 474 rc = WinRequestMutexSem((HMTX)pHandle->hHMHandle, dwTimeout); 475 break; 476 } 477 if(rc && rc != ERROR_INTERRUPT && rc != ERROR_TIMEOUT && rc != ERROR_SEM_OWNER_DIED) { 478 dprintf(("WinWaitEventSem/WinRequestMutexSem %x failed with rc %d", pHandle->hHMHandle, rc)); 479 SetLastError(error2WinError(rc)); 480 return WAIT_FAILED_W; 481 } 482 SetLastError(ERROR_SUCCESS_W); 483 if(rc == ERROR_INTERRUPT || rc == ERROR_SEM_OWNER_DIED) { 484 dprintf(("WAIT_ABANDONED_W")); 485 return WAIT_ABANDONED_W; 486 } 487 else 488 if(rc == ERROR_TIMEOUT) { 489 dprintf(("WAIT_TIMEOUT_W")); 490 return WAIT_TIMEOUT_W; 491 } 492 MSG msg ; 493 494 if(pfnPeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE_W) == TRUE) { 495 dprintf(("WAIT_OBJECT_0_W+1")); 496 return WAIT_OBJECT_0_W + 1; 497 } 498 dprintf(("WAIT_OBJECT_0_W+1")); 499 return WAIT_OBJECT_0_W; 500 } 501 pHandles = (PHMHANDLEDATA *)alloca(cObjects * sizeof(PHMHANDLEDATA)); 502 pSemRec = (PSEMRECORD)alloca(cObjects * sizeof(SEMRECORD)); 503 if(pHandles == NULL || pSemRec == NULL) { 504 dprintf(("ERROR: out of memory!!")); 505 SetLastError(ERROR_OUTOFMEMORY_W); 427 506 return WAIT_FAILED_W; 428 507 } 429 430 return WAIT_FAILED_W; 431 } 508 for(i=0;i<cObjects;i++) { 509 pHandles[i] = HMQueryHandleData(lphObjects[i]); 510 if(pHandles[i] == NULL) { 511 dprintf(("ERROR: handle %x not recognized", lphObjects[i])); 512 SetLastError(ERROR_INVALID_HANDLE_W); 513 return WAIT_FAILED_W; 514 } 515 if(!(pHandles[i]->dwAccess & SYNCHRONIZE_W) ) 516 { 517 dprintf(("ERROR: Access denied (handle %x, index %d)!!", lphObjects[i], i)); 518 SetLastError(ERROR_ACCESS_DENIED_W); 519 return WAIT_FAILED_W; 520 } 521 if(pHandles[i]->dwInternalType == HMTYPE_SEMAPHORE) { 522 PSEM_INFO pSemInfo = (PSEM_INFO)pHandles[i]->hHMHandle; 523 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle %3i: ODIN-%08xh, OS/2-%08xh", 524 i, lphObjects[i], pSemInfo->hev)); 525 } 526 else 527 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle %3i: ODIN-%08xh, OS/2-%08xh", 528 i, lphObjects[i], pHandles[i]->hHMHandle)); 529 530 } 531 j = 0; 532 for(i=0;i<cObjects;i++) { 533 if(pHandles[i]->dwInternalType == HMTYPE_SEMAPHORE) { 534 PSEM_INFO pSemInfo = (PSEM_INFO)pHandles[i]->hHMHandle; 535 536 if(InterlockedDecrement(&pSemInfo->currentCount) >= 0) { 537 if(!fWaitAll) { 538 return WAIT_OBJECT_0_W + i; 539 } 540 } 541 else { 542 pSemRec[j].hsemCur = (HSEM)pSemInfo->hev; 543 pSemRec[j].ulUser = j; 544 j++; 545 } 546 } 547 else { 548 pSemRec[j].hsemCur = (HSEM)pHandles[i]->hHMHandle; 549 pSemRec[j].ulUser = j; 550 j++; 551 } 552 } 553 rc = DosCreateMuxWaitSem(NULL, &hmux, j, pSemRec, (fWaitAll) ? DCMW_WAIT_ALL : DCMW_WAIT_ANY); 554 if(rc) { 555 dprintf(("DosCreateMuxWaitSem failed with rc %d", rc)); 556 SetLastError(error2WinError(rc)); 557 return WAIT_FAILED_W; 558 } 559 ulUser = -1; 560 rc = WinWaitMuxWaitSem(hmux, dwTimeout, &ulUser); 561 DosCloseMuxWaitSem(hmux); 562 if(rc && rc != ERROR_INTERRUPT && rc != ERROR_TIMEOUT && rc != ERROR_SEM_OWNER_DIED) { 563 dprintf(("DosWaitMuxWaitSem %x failed with rc %d", hmux, rc)); 564 SetLastError(error2WinError(rc)); 565 return WAIT_FAILED_W; 566 } 567 SetLastError(ERROR_SUCCESS_W); 568 if(rc == ERROR_INTERRUPT || rc == ERROR_SEM_OWNER_DIED) { 569 //TODO: add index of handle that caused the error.... 570 dprintf(("WAIT_ABANDONED_W")); 571 return WAIT_ABANDONED_W; 572 } 573 else 574 if(rc == ERROR_TIMEOUT) { 575 dprintf(("WAIT_TIMEOUT_W")); 576 return WAIT_TIMEOUT_W; 577 } 578 if(ulUser == -1) { 579 dprintf(("WAIT_OBJECT_0_W+%d", cObjects)); 580 return WAIT_OBJECT_0_W + cObjects; //message waiting 581 } 582 dprintf(("WAIT_OBJECT_0_W+%d", ulUser)); 583 return WAIT_OBJECT_0_W + ulUser; 584 } 585 432 586 #endif 433 587 … … 449 603 DWORD dwTimeout) 450 604 { 451 dprintf(("KERNEL32: ERROR: HandleManager::DeviceHandler::WaitForMultipleObjects %08x %d %x %d %x", 452 pHMHandleData->hHMHandle, cObjects, lphObjects, fWaitAll, dwTimeout)); 453 454 if(!(pHMHandleData->dwAccess & SYNCHRONIZE_W) ) 455 { 456 dprintf(("ERROR: Access denied!!")); 457 SetLastError(ERROR_ACCESS_DENIED_W); 605 return HMSemWaitForMultipleObjects(cObjects, lphObjects, fWaitAll, dwTimeout); 606 } 607 608 DWORD HMSemWaitForMultipleObjects(DWORD cObjects, 609 PHANDLE lphObjects, 610 BOOL fWaitAll, 611 DWORD dwTimeout) 612 { 613 PHMHANDLEDATA *pHandles; 614 HMUX hmux; 615 PSEMRECORD pSemRec; 616 int i, j; 617 APIRET rc; 618 ULONG ulUser; 619 620 dprintf(("KERNEL32: WaitForMultipleObjects %d %x %d %x", 621 cObjects, lphObjects, fWaitAll, dwTimeout)); 622 623 pHandles = (PHMHANDLEDATA *)alloca(cObjects * sizeof(PHMHANDLEDATA)); 624 pSemRec = (PSEMRECORD)alloca(cObjects * sizeof(SEMRECORD)); 625 if(pHandles == NULL || pSemRec == NULL) { 626 dprintf(("ERROR: out of memory!!")); 627 SetLastError(ERROR_OUTOFMEMORY_W); 458 628 return WAIT_FAILED_W; 459 629 } 460 461 return WAIT_FAILED_W; 462 } 630 for(i=0;i<cObjects;i++) { 631 pHandles[i] = HMQueryHandleData(lphObjects[i]); 632 if(pHandles[i] == NULL) { 633 dprintf(("ERROR: handle %x not recognized", lphObjects[i])); 634 } 635 if(!(pHandles[i]->dwAccess & EVENT_MODIFY_STATE_W) ) 636 { 637 dprintf(("ERROR: Access denied (handle %x, index %d)!!", lphObjects[i], i)); 638 SetLastError(ERROR_INVALID_HANDLE_W); 639 return WAIT_FAILED_W; 640 } 641 if(pHandles[i]->dwInternalType == HMTYPE_SEMAPHORE) { 642 PSEM_INFO pSemInfo = (PSEM_INFO)pHandles[i]->hHMHandle; 643 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle %3i: ODIN-%08xh, OS/2-%08xh", 644 i, lphObjects[i], pSemInfo->hev)); 645 } 646 else 647 dprintf(("KERNEL32: HMWaitForMultipleObjects: handle %3i: ODIN-%08xh, OS/2-%08xh", 648 i, lphObjects[i], pHandles[i]->hHMHandle)); 649 650 } 651 j = 0; 652 for(i=0;i<cObjects;i++) { 653 if(pHandles[i]->dwInternalType == HMTYPE_SEMAPHORE) { 654 PSEM_INFO pSemInfo = (PSEM_INFO)pHandles[i]->hHMHandle; 655 656 if(InterlockedDecrement(&pSemInfo->currentCount) >= 0) { 657 if(!fWaitAll) { 658 return WAIT_OBJECT_0_W + i; 659 } 660 } 661 else { 662 pSemRec[j].hsemCur = (HSEM)pSemInfo->hev; 663 pSemRec[j].ulUser = j; 664 j++; 665 } 666 } 667 else { 668 pSemRec[j].hsemCur = (HSEM)pHandles[i]->hHMHandle; 669 pSemRec[j].ulUser = j; 670 j++; 671 } 672 } 673 rc = DosCreateMuxWaitSem(NULL, &hmux, j, pSemRec, (fWaitAll) ? DCMW_WAIT_ALL : DCMW_WAIT_ANY); 674 if(rc) { 675 dprintf(("DosCreateMuxWaitSem failed with rc %d", rc)); 676 SetLastError(error2WinError(rc)); 677 return WAIT_FAILED_W; 678 } 679 rc = DosWaitMuxWaitSem(hmux, dwTimeout, &ulUser); 680 DosCloseMuxWaitSem(hmux); 681 if(rc && rc != ERROR_INTERRUPT && rc != ERROR_TIMEOUT && rc != ERROR_SEM_OWNER_DIED) { 682 dprintf(("DosWaitMuxWaitSem %x failed with rc %d", hmux, rc)); 683 SetLastError(error2WinError(rc)); 684 return WAIT_FAILED_W; 685 } 686 SetLastError(ERROR_SUCCESS_W); 687 if(rc == ERROR_INTERRUPT || rc == ERROR_SEM_OWNER_DIED) { 688 //TODO: add index of handle that caused the error.... 689 return WAIT_ABANDONED_W; 690 } 691 else 692 if(rc == ERROR_TIMEOUT) { 693 return WAIT_TIMEOUT_W; 694 } 695 return WAIT_OBJECT_0_W + ulUser; 696 } 697 463 698 #endif 464 699 … … 507 742 508 743 rc = DosResetEventSem(pSemInfo->hev, &count); 509 if(rc ) {744 if(rc && rc != ERROR_ALREADY_RESET) { 510 745 dprintf(("DosResetEventSem %x failed with rc %d", pSemInfo->hev, rc)); 511 746 SetLastError(error2WinError(rc)); … … 526 761 } 527 762 763 //****************************************************************************** 764 //Replaces illegal characters in semaphore name (or else OS/2 will return 765 //ERROR_INVALID_NAME 766 //****************************************************************************** 767 void FixSemName(char *lpszSemaphoreName) 768 { 769 while(TRUE) { 770 switch(*lpszSemaphoreName) { 771 case 0: 772 return; 773 case '?': 774 case ':': 775 *lpszSemaphoreName = '_'; 776 break; 777 } 778 lpszSemaphoreName++; 779 } 780 } 781 //****************************************************************************** 782 //****************************************************************************** -
trunk/src/kernel32/hmsemaphore.h
r6060 r6084 1 /* $Id: hmsemaphore.h,v 1. 4 2001-06-21 21:07:54sandervl Exp $ */1 /* $Id: hmsemaphore.h,v 1.5 2001-06-23 16:59:28 sandervl Exp $ */ 2 2 3 3 /* … … 23 23 #include "HMDevice.h" 24 24 #include "HMOpen32.h" 25 26 #ifdef USE_OS2SEMAPHORES 27 typedef struct { 28 LONG currentCount; 29 LONG maximumCount; 30 LONG refCount; 31 ULONG hev; 32 } SEM_INFO, *PSEM_INFO; 33 #endif 25 34 26 35 … … 97 106 98 107 108 DWORD HMSemWaitForMultipleObjects (DWORD cObjects, 109 PHANDLE lphObjects, 110 BOOL fWaitAll, 111 DWORD dwTimeout); 112 113 DWORD HMSemMsgWaitForMultipleObjects (DWORD cObjects, 114 PHANDLE lphObjects, 115 BOOL fWaitAll, 116 DWORD dwTimeout, 117 DWORD dwWakeMask); 118 119 void FixSemName(char *lpszSemaphoreName); 120 99 121 #endif /* _HM_DEVICE_SEMAPHORE_H_ */ 100 122
Note:
See TracChangeset
for help on using the changeset viewer.