semfastmutex-r0drv-solaris.c revision e7e8a6cb1597db3e0a1a83733e1d90e7a1688647
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * innotek Portable Runtime - Fast Mutex Semaphores, Ring-0 Driver, Solaris.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Copyright (C) 2006-2007 innotek GmbH
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * available from http://www.virtualbox.org. This file is free software;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * General Public License as published by the Free Software Foundation,
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/*******************************************************************************
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync* Header Files *
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync*******************************************************************************/
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync/*******************************************************************************
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync* Structures and Typedefs *
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync*******************************************************************************/
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync * Wrapper for the Solaris mutex.
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync /** Magic value (RTSEMFASTMUTEX_MAGIC). */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync /** The Solaris mutex. */
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsyncRTDECL(int) RTSemFastMutexCreate(PRTSEMFASTMUTEX pMutexSem)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync AssertCompile(sizeof(RTSEMFASTMUTEXINTERNAL) > sizeof(void *));
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync PRTSEMFASTMUTEXINTERNAL pFastInt = (PRTSEMFASTMUTEXINTERNAL)RTMemAlloc(sizeof(*pFastInt));
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync mutex_init (&pFastInt->Mtx, "IPRT Fast Mutex Semaphore", MUTEX_DEFAULT, NULL);
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsyncRTDECL(int) RTSemFastMutexDestroy(RTSEMFASTMUTEX MutexSem)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync PRTSEMFASTMUTEXINTERNAL pFastInt = (PRTSEMFASTMUTEXINTERNAL)MutexSem;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync AssertMsgReturn(pFastInt->u32Magic == RTSEMFASTMUTEX_MAGIC,
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync ("pFastInt->u32Magic=%RX32 pFastInt=%p\n", pFastInt->u32Magic, pFastInt),
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync ASMAtomicXchgU32(&pFastInt->u32Magic, RTSEMFASTMUTEX_MAGIC_DEAD);
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsyncRTDECL(int) RTSemFastMutexRequest(RTSEMFASTMUTEX MutexSem)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync PRTSEMFASTMUTEXINTERNAL pFastInt = (PRTSEMFASTMUTEXINTERNAL)MutexSem;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync AssertMsgReturn(pFastInt->u32Magic == RTSEMFASTMUTEX_MAGIC,
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync ("pFastInt->u32Magic=%RX32 pFastInt=%p\n", pFastInt->u32Magic, pFastInt),
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsyncRTDECL(int) RTSemFastMutexRelease(RTSEMFASTMUTEX MutexSem)
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync PRTSEMFASTMUTEXINTERNAL pFastInt = (PRTSEMFASTMUTEXINTERNAL)MutexSem;
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync AssertMsgReturn(pFastInt->u32Magic == RTSEMFASTMUTEX_MAGIC,
833f83ce101b6e9168f519decc0dc7a1079d35f7vboxsync ("pFastInt->u32Magic=%RX32 pFastInt=%p\n", pFastInt->u32Magic, pFastInt),