VirtualBox

Changeset 96137 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Aug 11, 2022 2:35:45 PM (2 years ago)
Author:
vboxsync
Message:

Recording/Main: Propagate errors further up, to let clients ask IRecordingSettings directly what actually went wrong via IVirtualBoxErrorInfo. ​bugref:10275

Location:
trunk/src/VBox/Main
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r95645 r96137  
    58745874 * Enables or disables recording of a VM.
    58755875 *
    5876  * @returns IPRT status code. Will return VERR_NO_CHANGE if the recording state has not been changed.
     5876 * @returns VBox status code.
     5877 * @retval  VERR_NO_CHANGE if the recording state has not been changed.
    58775878 * @param   fEnable             Whether to enable or disable the recording.
    58785879 * @param   pAutoLock           Pointer to auto write lock to use for attaching/detaching required driver(s) at runtime.
     
    59095910                            if (RT_SUCCESS(vrc))
    59105911                                vrc = mRecording.mAudioRec->doAttachDriverViaEmt(ptrVM.rawUVM(), ptrVM.vtable(), pAutoLock);
     5912
     5913                            if (RT_FAILURE(vrc))
     5914                                setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Attaching to audio recording driver failed (%Rrc) -- please consult log file for details"), vrc);
    59115915                        }
    59125916# endif
     
    59165920                            vrc = pDisplay->i_recordingInvalidate();
    59175921                            if (RT_SUCCESS(vrc))
     5922                            {
    59185923                                vrc = i_recordingStart(pAutoLock);
     5924                                if (RT_FAILURE(vrc))
     5925                                    setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Recording start failed (%Rrc) -- please consult log file for details"), vrc);
     5926                            }
    59195927                        }
    59205928                    }
     5929                    else
     5930                        setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Recording initialization failed (%Rrc) -- please consult log file for details"), vrc);
    59215931
    59225932                    if (RT_FAILURE(vrc))
     
    59255935                else
    59265936                {
    5927                     i_recordingStop(pAutoLock);
     5937                    vrc = i_recordingStop(pAutoLock);
     5938                    if (RT_SUCCESS(vrc))
     5939                    {
    59285940# ifdef VBOX_WITH_AUDIO_RECORDING
    5929                     if (mRecording.mAudioRec)
    5930                         mRecording.mAudioRec->doDetachDriverViaEmt(ptrVM.rawUVM(), ptrVM.vtable(), pAutoLock);
     5941                        if (mRecording.mAudioRec)
     5942                            mRecording.mAudioRec->doDetachDriverViaEmt(ptrVM.rawUVM(), ptrVM.vtable(), pAutoLock);
    59315943# endif
    5932                     i_recordingDestroy();
     5944                        i_recordingDestroy();
     5945                    }
     5946                    else
     5947                       setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Recording stop failed (%Rrc) -- please consult log file for details"), vrc);
    59335948                }
    59345949            }
     
    59405955        }
    59415956        else /* Should not happen. */
     5957        {
    59425958            vrc = VERR_NO_CHANGE;
     5959            setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Recording already %s"), fIsEnabled ? tr("enabled") : tr("disabled"));
     5960        }
    59435961    }
    59445962
     
    59715989            ::FireRecordingChangedEvent(mEventSource);
    59725990        }
    5973 
     5991        else /* Error set via ErrorInfo within i_recordingEnable() already. */
     5992            rc = VBOX_E_IPRT_ERROR;
    59745993        ptrVM.release();
    59755994    }
  • trunk/src/VBox/Main/src-client/Recording.cpp

    r95645 r96137  
    198198            break;
    199199        }
     200        catch (int vrc_thrown) /* Catch rc thrown by constructor. */
     201        {
     202            vrc = vrc_thrown;
     203            break;
     204        }
    200205
    201206        ++itScreen;
  • trunk/src/VBox/Main/src-server/RecordingSettingsImpl.cpp

    r95918 r96137  
    246246    const bool fEnabled = RT_BOOL(enable);
    247247
    248     HRESULT rc = S_OK;
     248    HRESULT hrc = S_OK;
    249249
    250250    if (m->bd->fEnabled != fEnabled)
     
    255255        alock.release();
    256256
    257         rc = m->pMachine->i_onRecordingChange(enable);
    258         if (FAILED(rc))
    259         {
     257        hrc = m->pMachine->i_onRecordingChange(enable);
     258        if (FAILED(hrc))
     259        {
     260            com::ErrorInfo errMachine; /* Get error info from machine call above. */
     261
    260262            /*
    261263             * Normally we would do the actual change _after_ i_onRecordingChange() succeeded.
     
    266268            alock.acquire();
    267269            m->bd->fEnabled = m->bd.backedUpData()->fEnabled;
     270
     271            if (errMachine.isBasicAvailable())
     272                hrc = setError(errMachine);
    268273        }
    269274        else
     
    278283            /** Save settings if online - @todo why is this required? -- @bugref{6818} */
    279284            if (Global::IsOnline(m->pMachine->i_getMachineState()))
    280                 rc = m->pMachine->i_saveSettings(NULL, mlock);
    281         }
    282     }
    283 
    284     return rc;
     285            {
     286                com::ErrorInfo errMachine;
     287                hrc = m->pMachine->i_saveSettings(NULL, mlock);
     288                if (FAILED(hrc))
     289                {
     290                    /* Got error info from machine call above. */
     291                    if (errMachine.isBasicAvailable())
     292                        hrc = setError(errMachine);
     293                }
     294            }
     295        }
     296    }
     297
     298    return hrc;
    285299}
    286300
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette