VirtualBox

Changeset 37818 in vbox


Ignore:
Timestamp:
Jul 7, 2011 1:25:03 PM (13 years ago)
Author:
vboxsync
Message:

Fix logging from R0

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/log.h

    r37591 r37818  
    15771577
    15781578/**
     1579 * Flushes a R0 logger instance to a R3 logger.
     1580 *
     1581 * @returns iprt status code.
     1582 * @param   pLogger      The R3 logger instance to flush pLoggerR0 to. If NULL
     1583 *                       the default logger is used.
     1584 * @param   pLoggerR0    The R0 logger instance to flush.
     1585 */
     1586RTDECL(void) RTLogFlushR0(PRTLOGGER pLogger, PRTLOGGER pLoggerR0);
     1587
     1588/**
    15791589 * Sets the custom prefix callback.
    15801590 *
  • trunk/include/iprt/mangling.h

    r37591 r37818  
    656656# define RTLogFlush                                     RT_MANGLER(RTLogFlush)
    657657# define RTLogFlushRC                                   RT_MANGLER(RTLogFlushRC)
     658# define RTLogFlushR0                                   RT_MANGLER(RTLogFlushR0)
    658659# define RTLogFlushToLogger                             RT_MANGLER(RTLogFlushToLogger)
    659660# define RTLogFormatV                                   RT_MANGLER(RTLogFormatV)
  • trunk/src/VBox/Runtime/common/log/log.cpp

    r37605 r37818  
    10601060RT_EXPORT_SYMBOL(RTLogSetCustomPrefixCallbackForR0);
    10611061
     1062RTDECL(void) RTLogFlushR0(PRTLOGGER pLogger, PRTLOGGER pLoggerR0)
     1063{
     1064    /*
     1065     * Resolve defaults.
     1066     */
     1067    if (!pLogger)
     1068    {
     1069        pLogger = RTLogDefaultInstance();
     1070        if (!pLogger)
     1071        {
     1072            /* flushing to "/dev/null". */
     1073            if (pLoggerR0->offScratch)
     1074                    pLoggerR0->offScratch = 0;
     1075            return;
     1076        }
     1077    }
     1078
     1079    /*
     1080     * Any thing to flush?
     1081     */
     1082    if (    pLoggerR0->offScratch
     1083        ||  pLogger->offScratch)
     1084    {
     1085        /*
     1086         * Acquire logger semaphores.
     1087         */
     1088        int rc = rtlogLock(pLogger);
     1089        if (RT_FAILURE(rc))
     1090            return;
     1091        if (RT_SUCCESS(rc))
     1092        {
     1093            /*
     1094             * Write whatever the GC instance contains to the HC one, and then
     1095             * flush the HC instance.
     1096             */
     1097            if (pLoggerR0->offScratch)
     1098            {
     1099                rtLogOutput(pLogger, pLoggerR0->achScratch, pLoggerR0->offScratch);
     1100                rtLogOutput(pLogger, NULL, 0);
     1101                pLoggerR0->offScratch = 0;
     1102            }
     1103        }
     1104        rtlogUnlock(pLogger);
     1105    }
     1106}
     1107RT_EXPORT_SYMBOL(RTLogFlushR0);
     1108
    10621109# endif /* IN_RING3 */
    10631110
     
    10891136                {
    10901137                    pSrcLogger->offScratch = 0;
    1091                     rtlogLock(pSrcLogger);
     1138                    rtlogUnlock(pSrcLogger);
    10921139                }
    10931140            }
  • trunk/src/VBox/VMM/VMMR3/VMM.cpp

    r37699 r37818  
    884884     * in ring-0. Only initialize it once.
    885885     */
    886     PRTLOGGER const pDefault = RTLogRelDefaultInstance();
     886    PRTLOGGER const pDefault = RTLogDefaultInstance();
    887887    for (VMCPUID i = 0; i < pVM->cCpus; i++)
    888888    {
     
    901901                AssertReleaseMsgRCReturn(rc, ("vmmR0LoggerFlush not found! rc=%Rra\n", rc), rc);
    902902
    903                 rc = RTLogCreateForR0(&pR0LoggerR3->Logger, pR0LoggerR3->cbLogger, pVCpu->vmm.s.pR0LoggerR0,
     903                rc = RTLogCreateForR0(&pR0LoggerR3->Logger, pR0LoggerR3->cbLogger, pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger),
    904904                                      pfnLoggerWrapper, pfnLoggerFlush,
    905905                                      RTLOGFLAGS_BUFFERED, RTLOGDEST_DUMMY);
     
    909909                rc = PDMR3LdrGetSymbolR0(pVM, VMMR0_MAIN_MODULE_NAME, "vmmR0LoggerPrefix", &pfnLoggerPrefix);
    910910                AssertReleaseMsgRCReturn(rc, ("vmmR0LoggerPrefix not found! rc=%Rra\n", rc), rc);
    911                 rc = RTLogSetCustomPrefixCallbackForR0(&pR0LoggerR3->Logger, pVCpu->vmm.s.pR0LoggerR0, pfnLoggerPrefix, NIL_RTR0PTR);
     911                rc = RTLogSetCustomPrefixCallbackForR0(&pR0LoggerR3->Logger, pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger), pfnLoggerPrefix, NIL_RTR0PTR);
    912912                AssertReleaseMsgRCReturn(rc, ("RTLogSetCustomPrefixCallback failed! rc=%Rra\n", rc), rc);
    913913
     
    918918            }
    919919
    920             rc = RTLogCopyGroupsAndFlagsForR0(&pR0LoggerR3->Logger, pVCpu->vmm.s.pR0LoggerR0, pDefault,
    921                                               UINT32_MAX, RTLOGFLAGS_BUFFERED);
     920            rc = RTLogCopyGroupsAndFlagsForR0(&pR0LoggerR3->Logger, pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger), pDefault,
     921                                              RTLOGFLAGS_BUFFERED, UINT32_MAX);
    922922            AssertRC(rc);
    923923        }
     
    12931293        if (    pR0LoggerR3
    12941294            &&  pR0LoggerR3->Logger.offScratch > 0)
    1295             RTLogFlushToLogger(&pR0LoggerR3->Logger, NULL);
     1295            RTLogFlushR0(NULL, &pR0LoggerR3->Logger);
    12961296#endif /* !LOG_ENABLED */
    12971297        if (rc != VINF_VMM_CALL_HOST)
     
    19801980        if (    pVCpu->vmm.s.pR0LoggerR3
    19811981            &&  pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
    1982             RTLogFlushToLogger(&pVCpu->vmm.s.pR0LoggerR3->Logger, NULL);
     1982            RTLogFlushR0(NULL, &pVCpu->vmm.s.pR0LoggerR3->Logger);
    19831983#endif
    19841984        if (rc != VINF_VMM_CALL_HOST)
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