VirtualBox

Changeset 41214 in vbox for trunk


Ignore:
Timestamp:
May 8, 2012 5:59:43 PM (13 years ago)
Author:
vboxsync
Message:

Main: move handleUnexpectedExceptions method to VirtualBoxBase

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r40767 r41214  
    266266    static HRESULT setErrorStatic(HRESULT aResultCode, const char *pcsz, ...);
    267267    HRESULT setInvalidMachineStateError();
    268 
    269     static HRESULT handleUnexpectedExceptions(RT_SRC_POS_DECL);
    270268
    271269    static const char *convertControllerTypeToDev(StorageControllerType_T enmCtrlType);
  • trunk/src/VBox/Main/include/ParallelPortImpl.h

    r35638 r41214  
    66
    77/*
    8  * Copyright (C) 2006-2007 Oracle Corporation
     8 * Copyright (C) 2006-2012 Oracle Corporation
    99 *
    1010 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    8585};
    8686
    87 #endif // ____H_FLOPPYDRIVEIMPL
     87#endif // ____H_PARALLELPORTIMPL
    8888/* vi: set tabstop=4 shiftwidth=4 expandtab: */
  • trunk/src/VBox/Main/include/SerialPortImpl.h

    r35638 r41214  
    77
    88/*
    9  * Copyright (C) 2006-2007 Oracle Corporation
     9 * Copyright (C) 2006-2012 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    9393};
    9494
    95 #endif // ____H_FLOPPYDRIVEIMPL
     95#endif // ____H_SERIALPORTIMPL
    9696/* vi: set tabstop=4 shiftwidth=4 expandtab: */
  • trunk/src/VBox/Main/include/VirtualBoxBase.h

    r41187 r41214  
    758758    WriteLockHandle *stateLockHandle() { return &mStateLock; }
    759759
     760    static HRESULT handleUnexpectedExceptions(VirtualBoxBase *const aThis, RT_SRC_POS_DECL);
     761
    760762    static HRESULT setErrorInternal(HRESULT aResultCode,
    761763                                    const GUID &aIID,
  • trunk/src/VBox/Main/include/VirtualBoxImpl.h

    r41120 r41214  
    279279    static HRESULT ensureFilePathExists(const Utf8Str &strFileName, bool fCreate);
    280280
    281     static HRESULT handleUnexpectedExceptions(RT_SRC_POS_DECL);
    282 
    283281    const Utf8Str& settingsFilePath();
    284282
  • trunk/src/VBox/Main/src-all/VirtualBoxBase.cpp

    r41184 r41214  
    2020#include <iprt/semaphore.h>
    2121#include <iprt/asm.h>
     22#include <iprt/cpp/exception.h>
     23
     24#include <typeinfo>
    2225
    2326#if !defined (VBOX_WITH_XPCOM)
     
    292295
    293296    AssertMsgFailed (("mState = %d!", mState));
     297}
     298
     299/**
     300 * Handles unexpected exceptions by turning them into COM errors in release
     301 * builds or by hitting a breakpoint in the release builds.
     302 *
     303 * Usage pattern:
     304 * @code
     305        try
     306        {
     307            // ...
     308        }
     309        catch (LaLalA)
     310        {
     311            // ...
     312        }
     313        catch (...)
     314        {
     315            rc = VirtualBox::handleUnexpectedExceptions(this, RT_SRC_POS);
     316        }
     317 * @endcode
     318 *
     319 * @param aThis             object where the exception happened
     320 * @param RT_SRC_POS_DECL   "RT_SRC_POS" macro instantiation.
     321 *  */
     322/* static */
     323HRESULT VirtualBoxBase::handleUnexpectedExceptions(VirtualBoxBase *const aThis, RT_SRC_POS_DECL)
     324{
     325    try
     326    {
     327        /* re-throw the current exception */
     328        throw;
     329    }
     330    catch (const RTCError &err)      // includes all XML exceptions
     331    {
     332        return setErrorInternal(E_FAIL, aThis->getClassIID(), aThis->getComponentName(),
     333                                Utf8StrFmt(tr("%s.\n%s[%d] (%s)"),
     334                                           err.what(),
     335                                           pszFile, iLine, pszFunction).c_str(),
     336                                false /* aWarning */,
     337                                true /* aLogIt */);
     338    }
     339    catch (const std::exception &err)
     340    {
     341        return setErrorInternal(E_FAIL, aThis->getClassIID(), aThis->getComponentName(),
     342                                Utf8StrFmt(tr("Unexpected exception: %s [%s]\n%s[%d] (%s)"),
     343                                           err.what(), typeid(err).name(),
     344                                           pszFile, iLine, pszFunction).c_str(),
     345                                false /* aWarning */,
     346                                true /* aLogIt */);
     347    }
     348    catch (...)
     349    {
     350        return setErrorInternal(E_FAIL, aThis->getClassIID(), aThis->getComponentName(),
     351                                Utf8StrFmt(tr("Unknown exception\n%s[%d] (%s)"),
     352                                           pszFile, iLine, pszFunction).c_str(),
     353                                false /* aWarning */,
     354                                true /* aLogIt */);
     355    }
     356
     357    /* should not get here */
     358    AssertFailed();
     359    return E_FAIL;
    294360}
    295361
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r41089 r41214  
    117117#include <memory> // for auto_ptr
    118118#include <vector>
    119 #include <typeinfo>
    120119
    121120
     
    34843483}
    34853484
    3486 
    3487 /**
    3488  * @copydoc VirtualBox::handleUnexpectedExceptions
    3489  */
    3490 /* static */
    3491 HRESULT Console::handleUnexpectedExceptions(RT_SRC_POS_DECL)
    3492 {
    3493     try
    3494     {
    3495         /* re-throw the current exception */
    3496         throw;
    3497     }
    3498     catch (const std::exception &err)
    3499     {
    3500         return setErrorStatic(E_FAIL,
    3501                               tr("Unexpected exception: %s [%s]\n%s[%d] (%s)"),
    3502                               err.what(), typeid(err).name(),
    3503                               pszFile, iLine, pszFunction);
    3504     }
    3505     catch (...)
    3506     {
    3507         return setErrorStatic(E_FAIL,
    3508                               tr("Unknown exception\n%s[%d] (%s)"),
    3509                               pszFile, iLine, pszFunction);
    3510     }
    3511 
    3512     /* should not get here */
    3513     AssertFailed();
    3514     return E_FAIL;
    3515 }
    35163485
    35173486/* static */
  • trunk/src/VBox/Main/src-server/MachineImpl.cpp

    r41066 r41214  
    9090
    9191#include <algorithm>
    92 
    93 #include <typeinfo>
    9492
    9593#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     
    453451            catch (...)
    454452            {
    455                 rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     453                rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    456454            }
    457455        }
     
    708706        catch (...)
    709707        {
    710             rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     708            rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    711709        }
    712710
     
    25592557    catch (...)
    25602558    {
    2561         return VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     2559        return VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    25622560    }
    25632561
     
    89808978    catch (...)
    89818979    {
    8982         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     8980        rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    89838981    }
    89848982
     
    91279125    catch (...)
    91289126    {
    9129         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     9127        rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    91309128    }
    91319129
     
    95359533    catch (...)
    95369534    {
    9537         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     9535        rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    95389536    }
    95399537
     
    1216012158    catch (...)
    1216112159    {
    12162         return VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     12160        return VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    1216312161    }
    1216412162    return S_OK;
  • trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp

    r40487 r41214  
    115115    void updateSnapshotStorageLists(settings::SnapshotsList &sl, const Bstr &bstrOldId, const Bstr &bstrNewId) const;
    116116    void updateStateFile(settings::SnapshotsList &snl, const Guid &id, const Utf8Str &strFile) const;
    117     HRESULT createDifferencingMedium(const ComObjPtr<Medium> &pParent, const Utf8Str &strSnapshotFolder, RTCList<ComObjPtr<Medium> > &newMedia, ComObjPtr<Medium> *ppDiff) const;
     117    HRESULT createDifferencingMedium(const ComObjPtr<Machine> &pMachine, const ComObjPtr<Medium> &pParent, const Utf8Str &strSnapshotFolder, RTCList<ComObjPtr<Medium> > &newMedia, ComObjPtr<Medium> *ppDiff) const;
    118118    static int copyStateFileProgress(unsigned uPercentage, void *pvUser);
    119119
     
    644644}
    645645
    646 HRESULT MachineCloneVMPrivate::createDifferencingMedium(const ComObjPtr<Medium> &pParent, const Utf8Str &strSnapshotFolder, RTCList<ComObjPtr<Medium> > &newMedia, ComObjPtr<Medium> *ppDiff) const
     646HRESULT MachineCloneVMPrivate::createDifferencingMedium(const ComObjPtr<Machine> &pMachine, const ComObjPtr<Medium> &pParent, const Utf8Str &strSnapshotFolder, RTCList<ComObjPtr<Medium> > &newMedia, ComObjPtr<Medium> *ppDiff) const
    647647{
    648648    HRESULT rc = S_OK;
     
    690690    catch (...)
    691691    {
    692         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     692        rc = VirtualBoxBase::handleUnexpectedExceptions(pMachine, RT_SRC_POS);
    693693    }
    694694
     
    10571057                        ComObjPtr<Medium> pDiff;
    10581058                        /* create the diff under the snapshot medium */
    1059                         rc = d->createDifferencingMedium(pLMedium, strTrgSnapshotFolder,
     1059                        trgLock.release();
     1060                        srcLock.release();
     1061                        rc = d->createDifferencingMedium(p, pLMedium, strTrgSnapshotFolder,
    10601062                                                         newMedia, &pDiff);
     1063                        srcLock.acquire();
     1064                        trgLock.acquire();
    10611065                        if (FAILED(rc)) throw rc;
    10621066                        map.insert(TStrMediumPair(Utf8Str(bstrSrcId), pDiff));
     
    12331237                {
    12341238                    ComObjPtr<Medium> pDiff;
    1235                     rc = d->createDifferencingMedium(pNewParent, strTrgSnapshotFolder,
     1239                    trgLock.release();
     1240                    srcLock.release();
     1241                    rc = d->createDifferencingMedium(p, pNewParent, strTrgSnapshotFolder,
    12361242                                                     newMedia, &pDiff);
     1243                    srcLock.acquire();
     1244                    trgLock.acquire();
    12371245                    if (FAILED(rc)) throw rc;
    12381246                    /* diff image has to be used... */
     
    13581366    catch (...)
    13591367    {
    1360         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     1368        rc = VirtualBoxBase::handleUnexpectedExceptions(p, RT_SRC_POS);
    13611369    }
    13621370
  • trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp

    r41120 r41214  
    4545#include <vector>
    4646#include <memory> // for auto_ptr
    47 
    48 #include <typeinfo>
    4947
    5048#include "VirtualBoxImpl.h"
     
    487485    catch (...)
    488486    {
    489         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     487        rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    490488    }
    491489
     
    34483446    catch (...)
    34493447    {
    3450         rc = VirtualBox::handleUnexpectedExceptions(RT_SRC_POS);
     3448        rc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    34513449    }
    34523450
     
    39473945
    39483946    return S_OK;
    3949 }
    3950 
    3951 /**
    3952  * Handles unexpected exceptions by turning them into COM errors in release
    3953  * builds or by hitting a breakpoint in the release builds.
    3954  *
    3955  * Usage pattern:
    3956  * @code
    3957         try
    3958         {
    3959             // ...
    3960         }
    3961         catch (LaLalA)
    3962         {
    3963             // ...
    3964         }
    3965         catch (...)
    3966         {
    3967             rc = VirtualBox::handleUnexpectedExceptions (RT_SRC_POS);
    3968         }
    3969  * @endcode
    3970  *
    3971  * @param RT_SRC_POS_DECL "RT_SRC_POS" macro instantiation.
    3972  */
    3973 /* static */
    3974 HRESULT VirtualBox::handleUnexpectedExceptions(RT_SRC_POS_DECL)
    3975 {
    3976     try
    3977     {
    3978         /* re-throw the current exception */
    3979         throw;
    3980     }
    3981     catch (const RTCError &err)      // includes all XML exceptions
    3982     {
    3983         return setErrorStatic(E_FAIL,
    3984                               Utf8StrFmt(tr("%s.\n%s[%d] (%s)"),
    3985                                          err.what(),
    3986                                          pszFile, iLine, pszFunction).c_str());
    3987     }
    3988     catch (const std::exception &err)
    3989     {
    3990         return setErrorStatic(E_FAIL,
    3991                               Utf8StrFmt(tr("Unexpected exception: %s [%s]\n%s[%d] (%s)"),
    3992                                          err.what(), typeid(err).name(),
    3993                                          pszFile, iLine, pszFunction).c_str());
    3994     }
    3995     catch (...)
    3996     {
    3997         return setErrorStatic(E_FAIL,
    3998                               Utf8StrFmt(tr("Unknown exception\n%s[%d] (%s)"),
    3999                                          pszFile, iLine, pszFunction).c_str());
    4000     }
    4001 
    4002     /* should not get here */
    4003     AssertFailed();
    4004     return E_FAIL;
    40053947}
    40063948
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