PDMAsyncCompletionFileFailsafe.cpp revision d116d2fdc8bc55e97a36032d13c0532de69d6aca
/* $Id$ */
/** @file
* PDM Async I/O - Transport data asynchronous in R3 using EMT.
* Failsafe File I/O manager.
*/
/*
* Copyright (C) 2006-2008 Sun Microsystems, Inc.
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
#include "PDMAsyncCompletionFileInternal.h"
{
int rc = VINF_SUCCESS;
while (pTasks)
{
switch (pCurr->enmTransferType)
{
{
break;
}
{
{
NULL);
}
else
{
NULL);
}
break;
}
default:
}
}
return rc;
}
/**
* A fallback method in case something goes wrong with the normal
* I/O manager.
*/
{
int rc = VINF_SUCCESS;
{
{
}
/* Process endpoint events first. */
while (pEndpoint)
{
}
/* Now check for an external blocking event. */
if (pAioMgr->fBlockingEventPending)
{
switch (pAioMgr->enmBlockingEvent)
{
{
if (pAioMgr->pEndpointsHead)
break;
}
{
PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointRemove = pAioMgr->BlockingEventData.RemoveEndpoint.pEndpoint;
if (pPrev)
else
if (pNext)
break;
}
{
PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointClose = pAioMgr->BlockingEventData.CloseEndpoint.pEndpoint;
/* Make sure all tasks finished. */
}
break;
break;
default:
}
/* Release the waiting thread. */
}
}
return rc;
}