~ubuntu-branches/ubuntu/oneiric/virtualbox/oneiric-updates

« back to all changes in this revision

Viewing changes to src/VBox/Main/src-client/MachineDebuggerImpl.cpp

  • Committer: Package Import Robot
  • Author(s): Felix Geyer
  • Date: 2011-09-02 11:50:47 UTC
  • mfrom: (3.1.4 sid)
  • Revision ID: package-import@ubuntu.com-20110902115047-kfhmsikrpydgyoji
Tags: 4.1.2-dfsg-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Add Apport hook.
    - debian/virtualbox.files/source_virtualbox.py
    - debian/virtualbox.install
  - Drop *-source packages.
  - Add vboxguest modalias the to the package control field.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: MachineDebuggerImpl.cpp 35638 2011-01-19 19:10:49Z vboxsync $ */
 
1
/* $Id: MachineDebuggerImpl.cpp 38324 2011-08-05 14:02:53Z vboxsync $ */
2
2
/** @file
3
3
 * VBox IMachineDebugger COM class implementation.
4
4
 */
183
183
 * @returns COM status
184
184
 * @param   aEnable new user mode code recompile flag.
185
185
 */
186
 
STDMETHODIMP MachineDebugger::COMSETTER(RecompileUser) (BOOL aEnable)
 
186
STDMETHODIMP MachineDebugger::COMSETTER(RecompileUser)(BOOL aEnable)
187
187
{
188
188
    LogFlowThisFunc(("enable=%d\n", aEnable));
189
189
 
190
190
    AutoCaller autoCaller(this);
191
 
    if (FAILED(autoCaller.rc())) return autoCaller.rc();
192
 
 
193
 
    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
194
 
 
195
 
    if (queueSettings())
 
191
    HRESULT hrc = autoCaller.rc();
 
192
    if (SUCCEEDED(hrc))
196
193
    {
197
 
        // queue the request
198
 
        mRecompileUserQueued = aEnable;
199
 
        return S_OK;
 
194
        AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
195
        if (queueSettings())
 
196
            mRecompileUserQueued = aEnable; // queue the request
 
197
        else
 
198
        {
 
199
            Console::SafeVMPtr ptrVM(mParent);
 
200
            hrc = ptrVM.rc();
 
201
            if (SUCCEEDED(hrc))
 
202
            {
 
203
                int vrc = EMR3SetExecutionPolicy(ptrVM.raw(), EMEXECPOLICY_RECOMPILE_RING3, RT_BOOL(aEnable));
 
204
                if (RT_FAILURE(vrc))
 
205
                    hrc = setError(VBOX_E_VM_ERROR, tr("EMR3SetExecutionPolicy failed with %Rrc"), vrc);
 
206
            }
 
207
        }
200
208
    }
201
 
 
202
 
    Console::SafeVMPtr pVM (mParent);
203
 
    if (FAILED(pVM.rc())) return pVM.rc();
204
 
 
205
 
    EMRAWMODE rawModeFlag = aEnable ? EMRAW_RING3_DISABLE : EMRAW_RING3_ENABLE;
206
 
    int rcVBox = VMR3ReqCallWait(pVM, VMCPUID_ANY, (PFNRT)EMR3RawSetMode, 2, pVM.raw(), rawModeFlag);
207
 
    if (RT_SUCCESS(rcVBox))
208
 
        return S_OK;
209
 
 
210
 
    AssertMsgFailed (("Could not set raw mode flags to %d, rcVBox = %Rrc\n",
211
 
                      rawModeFlag, rcVBox));
212
 
    return E_FAIL;
 
209
    return hrc;
213
210
}
214
211
 
215
212
/**
243
240
 * @returns COM status code
244
241
 * @param   aEnable new recompile supervisor code flag
245
242
 */
246
 
STDMETHODIMP MachineDebugger::COMSETTER(RecompileSupervisor) (BOOL aEnable)
 
243
STDMETHODIMP MachineDebugger::COMSETTER(RecompileSupervisor)(BOOL aEnable)
247
244
{
248
245
    LogFlowThisFunc(("enable=%d\n", aEnable));
249
246
 
250
247
    AutoCaller autoCaller(this);
251
 
    if (FAILED(autoCaller.rc())) return autoCaller.rc();
252
 
 
253
 
    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
254
 
 
255
 
    if (queueSettings())
 
248
    HRESULT hrc = autoCaller.rc();
 
249
    if (SUCCEEDED(hrc))
256
250
    {
257
 
        // queue the request
258
 
        mRecompileSupervisorQueued = aEnable;
259
 
        return S_OK;
 
251
        AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
252
        if (queueSettings())
 
253
            mRecompileSupervisorQueued = aEnable; // queue the request
 
254
        else
 
255
        {
 
256
            Console::SafeVMPtr ptrVM(mParent);
 
257
            hrc = ptrVM.rc();
 
258
            if (SUCCEEDED(hrc))
 
259
            {
 
260
                int vrc = EMR3SetExecutionPolicy(ptrVM.raw(), EMEXECPOLICY_RECOMPILE_RING0, RT_BOOL(aEnable));
 
261
                if (RT_FAILURE(vrc))
 
262
                    hrc = setError(VBOX_E_VM_ERROR, tr("EMR3SetExecutionPolicy failed with %Rrc"), vrc);
 
263
            }
 
264
        }
260
265
    }
261
 
 
262
 
    Console::SafeVMPtr pVM (mParent);
263
 
    if (FAILED(pVM.rc())) return pVM.rc();
264
 
 
265
 
    EMRAWMODE rawModeFlag = aEnable ? EMRAW_RING0_DISABLE : EMRAW_RING0_ENABLE;
266
 
    int rcVBox = VMR3ReqCallWait(pVM, VMCPUID_ANY, (PFNRT)EMR3RawSetMode, 2, pVM.raw(), rawModeFlag);
267
 
    if (RT_SUCCESS(rcVBox))
268
 
        return S_OK;
269
 
 
270
 
    AssertMsgFailed (("Could not set raw mode flags to %d, rcVBox = %Rrc\n",
271
 
                      rawModeFlag, rcVBox));
272
 
    return E_FAIL;
 
266
    return hrc;
273
267
}
274
268
 
275
269
/**