tstSupSem-Zombie.cpp revision e64031e20c39650a7bc902a3e1aba613b9415dee
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * Support Library Testcase - Ring-3 Semaphore interface - Zombie bugs.
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * Copyright (C) 2009 Oracle Corporation
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * available from http://www.virtualbox.org. This file is free software;
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * you can redistribute it and/or modify it under the terms of the GNU
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * General Public License (GPL) as published by the Free Software
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * The contents of this file may alternatively be used under the terms
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync * of the Common Development and Distribution License Version 1.0
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * VirtualBox OSE distribution, in which case the provisions of the
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync * CDDL are applicable instead of those of the GPL.
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync * You may elect to license modified versions of this file under the
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync * terms and conditions of either the GPL or the CDDL or both.
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync/*******************************************************************************
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync* Header Files *
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync*******************************************************************************/
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync/*******************************************************************************
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync* Structures and Typedefs *
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync*******************************************************************************/
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsyncstatic DECLCALLBACK(int) tstSupSemSRETimed(RTTHREAD hSelf, void *pvUser)
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync int rc = SUPSemEventWaitNoResume(g_pSession, hEvent, 120*1000);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsyncstatic DECLCALLBACK(int) tstSupSemMRETimed(RTTHREAD hSelf, void *pvUser)
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)pvUser;
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync int rc = SUPSemEventMultiWaitNoResume(g_pSession, hEventMulti, 120*1000);
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsyncstatic DECLCALLBACK(int) tstSupSemSREInf(RTTHREAD hSelf, void *pvUser)
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync int rc = SUPSemEventWaitNoResume(g_pSession, hEvent, RT_INDEFINITE_WAIT);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsyncstatic DECLCALLBACK(int) tstSupSemMREInf(RTTHREAD hSelf, void *pvUser)
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)pvUser;
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync int rc = SUPSemEventMultiWaitNoResume(g_pSession, hEventMulti, RT_INDEFINITE_WAIT);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsyncstatic int mainChild(void)
c89ab46314a2ed24bfd30a78fabcd673f66a85c5vboxsync RTPrintf("tstSupSem-Zombie-Child: fatal error: RTR3InitAndSUPLib failed with rc=%Rrc\n", rc);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync rc = RTTestCreate("tstSupSem-Zombie-Child", &hTest);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync RTPrintf("tstSupSem-Zombie-Child: fatal error: RTTestCreate failed with rc=%Rrc\n", rc);
e1bb6985ff821f55a24e0959c809a15871e58c5avboxsync RTTestFailed(hTest, "SUPR3Init failed with rc=%Rrc\n", rc);
RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemSRETimed, (void *)hEvent, 0, RTTHREADTYPE_TIMER, 0 /*fFlags*/, "IntSRE"), VINF_SUCCESS);
RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemMRETimed, (void *)hEventMulti, 0, RTTHREADTYPE_TIMER, 0 /*fFlags*/, "IntMRE"), VINF_SUCCESS);
RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemSREInf, (void *)hEvent, 0, RTTHREADTYPE_TIMER, 0 /*fFlags*/, "IntSRE"), VINF_SUCCESS);
RTTESTI_CHECK_RC(RTThreadCreate(&hThread, tstSupSemMREInf, (void *)hEventMulti, 0, RTTHREADTYPE_TIMER, 0 /*fFlags*/, "IntMRE"), VINF_SUCCESS);
if (rc)
return rc;
return mainChild();