bool vrpn_Semaphore::destroy() { if (fUsingLock) { usfreelock(l, vrpn_Semaphore::ppaArena); } else { usfreesema(ps, vrpn_Semaphore::ppaArena); } return true; }
bool vrpn_Semaphore::destroy() { #ifdef sgi if (fUsingLock) { usfreelock( l, vrpn_Semaphore::ppaArena ); } else { usfreesema( ps, vrpn_Semaphore::ppaArena ); } #elif defined(_WIN32) if (!CloseHandle(hSemaphore)) { // get error info from windows (from FormatMessage help page) LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); fprintf(stderr, "vrpn_Semaphore::destroy: error destroying semaphore, " "WIN32 CloseHandle call caused the following error: %s\n", (LPTSTR) lpMsgBuf); // Free the buffer. LocalFree( lpMsgBuf ); return false; } #else // Posix threads are the default. #ifdef __APPLE__ if (sem_close(semaphore) != 0) { perror("vrpn_Semaphore::destroy: error destroying semaphore."); return false; } #else if (sem_destroy(semaphore) != 0) { fprintf(stderr, "vrpn_Semaphore::destroy: error destroying semaphore.\n"); return false; } #endif semaphore = NULL; #endif return true; }