68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync/* $Id$ */
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync/** @file
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * IPRT - RTSemEventMultiWait, implementation based on RTSemEventMultiWaitEx.
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync */
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2010-2011 Oracle Corporation
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync *
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * available from http://www.virtualbox.org. This file is free software;
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * you can redistribute it and/or modify it under the terms of the GNU
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * General Public License (GPL) as published by the Free Software
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync *
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * The contents of this file may alternatively be used under the terms
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * of the Common Development and Distribution License Version 1.0
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * VirtualBox OSE distribution, in which case the provisions of the
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * CDDL are applicable instead of those of the GPL.
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync *
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * You may elect to license modified versions of this file under the
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync * terms and conditions of either the GPL or the CDDL or both.
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync */
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync/*******************************************************************************
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync* Header Files *
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync*******************************************************************************/
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync#define LOG_GROUP RTLOGGROUP_SEM
715e49c31b15c23c17a9ce3be42a75e7c48d4b78vboxsync#define RTSEMEVENTMULTI_WITHOUT_REMAPPING
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync#include <iprt/semaphore.h>
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync#include "internal/iprt.h"
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync#include <iprt/err.h>
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync#include <iprt/assert.h>
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsyncRTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies)
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync{
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync int rc;
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync if (cMillies == RT_INDEFINITE_WAIT)
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync rc = RTSemEventMultiWaitEx(hEventMultiSem, RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_INDEFINITE, 0);
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync else
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync rc = RTSemEventMultiWaitEx(hEventMultiSem,
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_MILLISECS,
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync cMillies);
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync Assert(rc != VERR_INTERRUPTED);
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync return rc;
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync}
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsyncRT_EXPORT_SYMBOL(RTSemEventMultiWait);
68308f6fe3c9a03c39acd9615d767ad0b3b5dcedvboxsync