vbox: support shutdown of VMM

- send exit signal to parent
- avoid assertion in vbox posix backend

Fixes #1687
This commit is contained in:
Alexander Boettcher 2015-09-18 16:15:43 +02:00 committed by Christian Helmuth
parent ae12f04354
commit 6f3e9c12fb
5 changed files with 35 additions and 8 deletions

View File

@ -1 +1 @@
7d0320bac1d65391cd0f548126df7399b8fb7f18
2fc156a977246088b14dc9acad72ea3013c9e596

View File

@ -149,7 +149,7 @@ append config_of_app {
<binary name="virtualbox" />
<resource name="RAM" quantum="1280M"/>}
append config_of_app "
<config vbox_file=\"${vbox_file}\" vm_name=\"${flavor}\">"
<config ld_verbose=\"yes\" vbox_file=\"${vbox_file}\" vm_name=\"${flavor}\">"
append config_of_app {
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc">
<vfs>

View File

@ -24,20 +24,29 @@ HRESULT Console::updateMachineState(MachineState_T aMachineState)
HRESULT Console::attachToTapInterface(INetworkAdapter *networkAdapter)
{
HRESULT rc = S_OK;
ULONG slot = 0;
rc = networkAdapter->COMGETTER(Slot)(&slot);
HRESULT rc = networkAdapter->COMGETTER(Slot)(&slot);
AssertComRC(rc);
maTapFD[slot] = (RTFILE)1;
TRACE(S_OK)
TRACE(rc)
}
HRESULT Console::detachFromTapInterface(INetworkAdapter *networkAdapter)
{
ULONG slot = 0;
HRESULT rc = networkAdapter->COMGETTER(Slot)(&slot);
AssertComRC(rc);
if (maTapFD[slot] != NIL_RTFILE)
maTapFD[slot] = NIL_RTFILE;
TRACE(rc)
}
HRESULT Console::teleporterTrg(PUVM, IMachine*, com::Utf8Str*, bool, Progress*,
bool*) DUMMY(E_FAIL)
HRESULT Console::detachFromTapInterface(INetworkAdapter *networkAdapter) DUMMY(E_FAIL)
HRESULT Console::saveState(Reason_T aReason, IProgress **aProgress) DUMMY(E_FAIL)
STDMETHODIMP Console::COMGETTER(Debugger)(IMachineDebugger **aDebugger) DUMMY(E_FAIL)
@ -103,7 +112,13 @@ HRESULT Console::onlineMergeMedium(IMediumAttachment *aMediumAttachment,
IProgress *aProgress) DUMMY(E_FAIL)
void fireStateChangedEvent(IEventSource* aSource,
MachineState_T a_state) TRACE()
MachineState_T a_state)
{
if (a_state != MachineState_PoweredOff)
return;
Genode::env()->parent()->exit(0);
}
void fireRuntimeErrorEvent(IEventSource* aSource, BOOL a_fatal,
CBSTR a_id, CBSTR a_message)

View File

@ -0,0 +1,11 @@
--- a/src/app/virtualbox/src/VBox/Runtime/r3/posix/path-posix.cpp
+++ b/src/app/virtualbox/src/VBox/Runtime/r3/posix/path-posix.cpp
@@ -401,8 +401,6 @@
rc = errno == ENOENT ? VINF_SUCCESS : RTErrConvertFromErrno(errno);
else
{
- Assert(SrcStat.st_dev && DstStat.st_dev);
- Assert(SrcStat.st_ino && DstStat.st_ino);
if ( SrcStat.st_dev == DstStat.st_dev
&& SrcStat.st_ino == DstStat.st_ino
&& (SrcStat.st_mode & S_IFMT) == (DstStat.st_mode & S_IFMT))

View File

@ -21,3 +21,4 @@ serial.patch
rem_irq.patch
usb.patch
tm_smp.patch
posix.patch