diff --git a/mythtv/libs/libmythbase/logging.cpp b/mythtv/libs/libmythbase/logging.cpp index d48a3a2..66db6c8 100644 --- a/mythtv/libs/libmythbase/logging.cpp +++ b/mythtv/libs/libmythbase/logging.cpp @@ -776,22 +776,35 @@ void LogPrintLine( uint64_t mask, LogLevel_t level, const char *file, int line, /// spawned from this one. void logPropagateCalc(void) { + logPropagateArgList.clear() + QString mask = verboseString.trimmed(); mask.replace(QRegExp(" "), ","); mask.remove(QRegExp("^,")); logPropagateArgs = " --verbose " + mask; + logPropagateArgList << "--verbose" << mask; if (logPropagateOpts.propagate) + { logPropagateArgs += " --logpath " + logPropagateOpts.path; + logPropagateArgList << "--logpath" << logPropagateOpts.path; + } QString name = logLevelGetName(logLevel); logPropagateArgs += " --loglevel " + name; + logPropagateArgList << "--loglevel" << name; for (int i = 0; i < logPropagateOpts.quiet; i++) + { logPropagateArgs += " --quiet"; + logPropagateArgList << "--quiet"; + } if (!logPropagateOpts.dblog) + { logPropagateArgs += " --nodblog"; + logPropagateArgList << "--nodblog"; + } #ifndef _WIN32 if (logPropagateOpts.facility >= 0) @@ -803,6 +816,7 @@ void logPropagateCalc(void) syslogname->c_val != logPropagateOpts.facility); syslogname++); logPropagateArgs += QString(" --syslog %1").arg(syslogname->c_name); + logPropagateArgList << "--syslog" << syslogname->c_name; } #endif } diff --git a/mythtv/libs/libmythbase/mythlogging.h b/mythtv/libs/libmythbase/mythlogging.h index 3473ea2..7d3a791 100644 --- a/mythtv/libs/libmythbase/mythlogging.h +++ b/mythtv/libs/libmythbase/mythlogging.h @@ -3,6 +3,7 @@ #ifdef __cplusplus #include +#include #endif #include #include @@ -60,8 +61,9 @@ extern MBASE_PUBLIC uint64_t verboseMask; #ifdef __cplusplus } -extern MBASE_PUBLIC QString logPropagateArgs; -extern MBASE_PUBLIC QString verboseString; +extern MBASE_PUBLIC QStringList logPropagateArgList; +extern MBASE_PUBLIC QString logPropagateArgs; +extern MBASE_PUBLIC QString verboseString; MBASE_PUBLIC void logStart(QString logfile, int progress = 0, int quiet = 0, int facility = 0, LogLevel_t level = LOG_INFO, diff --git a/mythtv/libs/libmythbase/mythsystem.cpp b/mythtv/libs/libmythbase/mythsystem.cpp index 9ec5c45..818b458 100644 --- a/mythtv/libs/libmythbase/mythsystem.cpp +++ b/mythtv/libs/libmythbase/mythsystem.cpp @@ -105,6 +105,23 @@ void MythSystem::SetCommand(const QString &command, ProcessFlags(flags); + // add logging arguments + if (GetSetting("PropagateArgs")) + { + if (m_args.isEmpty()) + { + m_command += logPropagateArgs; + if (!logPropagateQuiet()) + m_command += " --quiet"; + } + else + { + m_args << logPropagateArgList; + if (!logPropagateQuiet()) + m_args << "--quiet"; + } + } + // check for execute rights if (!GetSetting("UseShell") && access(command.toUtf8().constData(), X_OK)) { @@ -320,6 +337,8 @@ void MythSystem::ProcessFlags(uint flags) m_settings["AnonLog"] = true; if( flags & kMSLowExitVal ) m_settings["OnlyLowExitVal"] = true; + if( flags & kMSPropagateLogs ) + m_settings["PropagateLogs"] = true; } QByteArray MythSystem::Read(int size) diff --git a/mythtv/libs/libmythbase/mythsystem.h b/mythtv/libs/libmythbase/mythsystem.h index 31ddd1b..6762fd5 100644 --- a/mythtv/libs/libmythbase/mythsystem.h +++ b/mythtv/libs/libmythbase/mythsystem.h @@ -26,6 +26,8 @@ typedef enum MythSystemMask { kMSLowExitVal = 0x00008000, ///< allow exit values 0-127 only kMSDisableUDPListener = 0x00010000, ///< disable MythMessage UDP listener /// for the duration of application. + kMSPropagateLogs = 0x00020000, ///< add arguments for MythTV log + /// propagation } MythSystemFlag; #ifdef __cplusplus diff --git a/mythtv/libs/libmythtv/previewgenerator.cpp b/mythtv/libs/libmythtv/previewgenerator.cpp index 20b4f2e..8bfb23d 100644 --- a/mythtv/libs/libmythtv/previewgenerator.cpp +++ b/mythtv/libs/libmythtv/previewgenerator.cpp @@ -224,30 +224,41 @@ bool PreviewGenerator::Run(void) else { // This is where we fork and run mythpreviewgen to actually make preview - command += QString(" --size %1x%2") - .arg(outSize.width()).arg(outSize.height()); + QStringList cmdargs; + + cmdargs << "--size" + << QString("%1x%2").arg(outsize.width()).arg(outSize.height()); if (captureTime >= 0) { if (timeInSeconds) - command += QString(" --seconds %1").arg(captureTime); + cmdargs << "--seconds"; else - command += QString(" --frame %1").arg(captureTime); + cmdargs << "--frame"; + cmdargs << QString::number(captureTime); } - command += QString(" --chanid %1").arg(programInfo.GetChanID()); - command += QString(" --starttime %1") - .arg(programInfo.GetRecordingStartTime(MythDate::kFilename)); + cmdargs << "--chanid" + << QString::number(programInfo.GetChanID()) + << "--starttime" + << QString(programInfo.GetRecordingStartTime(MythDate)); if (!outFileName.isEmpty()) - command += QString(" --outfile \"%1\"").arg(outFileName); - - command += logPropagateArgs; - if (!logPropagateQuiet()) - command += " --quiet"; + cmdargs << "--outfile" << outFileName; // Timeout in 30s - uint ret = myth_system(command, kMSDontBlockInputDevs | + MythSystem *ms = new MythSystem(command, cmdargs, + kMSDontBlockInputDevs | kMSDontDisableDrawing | - kMSProcessEvents, 30); + kMSProcessEvents | + kMSNoRunShell | + kMSAutoCleanup | + kMSPropagateArgs) + ms->SetNice(10); + ms->SetIOPrio(7); + + ms->Run(30); + uint ret = ms->Wait(); + delete ms; + if (ret != GENERIC_EXIT_OK) { LOG(VB_GENERAL, LOG_ERR, LOC +