Hello,
Given the following Java code snipet :
@Override
public void powerOff() throws MachineException {
Logger.track();
IMachine machine = ConnectionManager.findMachine(getUuid());
ISession session = ConnectionManager.getSession();
try {
machine.lockMachine(session, LockType.Shared);
IProgress p = session.getConsole().powerDown();
while (!p.getCompleted() || p.getCanceled()) {
try {
Thread.sleep(Math.abs(p.getTimeRemaining()) * waitingCoef);
} catch (InterruptedException e) {
Logger.exception(e);
}
}
Logger.debug("Return code : " + p.getResultCode());
} catch (VBoxException e) {
throw new MachineException(e.getWrapped().getMessage());
} finally {
if (session.getState().equals(SessionState.Locked)) {
session.unlockMachine();
}
machine.releaseRemote();
}
}
I am running this using the 4.2 API (from the 4.2.4 SDK to be precise)
against Web Services running on a Debian Testing box.
When running my Unit tests, I keep having an intermitent error on the
following part :
if (session.getState().equals(SessionState.Locked)) {
session.unlockMachine();
}
/session.unlockMachine()/ throws an exception with : "/The session is
not locked (session state: Unlocked) (0x8000FFFF)/". This exception is
thrown about 1 out of 5 times I use this method or a copy of this one
with only/.saveState()/ instead of/.powerDown()/ on the machine's
console object.
Am I missing something? From what I see here, it looks like the session
state changes between the IF statement and the actual unlockMachine()
call, looking like a race condition - or a bug?
Thank you for your insight.
Best regards,
Max
_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev