Skip to content
Snippets Groups Projects
Commit cb3fc22a authored by Alessandro Da Rugna's avatar Alessandro Da Rugna Committed by psychocrypt
Browse files

add option: flush stdout

Added the option to forcefully flush STDOUT, which may be useful when running the miner through a pipe instead than a shell.
If STDOUT is a shell, it's unbuffered by default.
If STDOUT is a pipe, it's buffered by default.
parent a7fb89be
No related branches found
No related tags found
No related merge requests found
......@@ -139,6 +139,14 @@ R"===(
*/
"daemon_mode" : false,
/*
* Buffered output control.
* When running the miner through a pipe, standard output is buffered. This means that the pipe won't read
* each output line immediately. This can cause delays when running in background.
* Set this option to true to flush stdout after each line, so it can be read immediately.
*/
"flush_stdout" : false,
/*
* Output file
*
......
......@@ -48,7 +48,7 @@ using namespace rapidjson;
*/
enum configEnum {
bTlsMode, bTlsSecureAlgo, sTlsFingerprint, sPoolAddr, sWalletAddr, sPoolPwd,sCurrency,
iCallTimeout, iNetRetry, iGiveUpLimit, iVerboseLevel, iAutohashTime,
iCallTimeout, iNetRetry, iGiveUpLimit, iVerboseLevel, iAutohashTime,bFlushStdout,
bDaemonMode, sOutputFile, iHttpdPort, bPreferIpv4, bNiceHashMode, bAesOverride, sUseSlowMem };
struct configVal {
......@@ -72,6 +72,7 @@ configVal oConfigValues[] = {
{ iGiveUpLimit, "giveup_limit", kNumberType },
{ iVerboseLevel, "verbose_level", kNumberType },
{ iAutohashTime, "h_print_time", kNumberType },
{ bFlushStdout, "flush_stdout", kTrueType},
{ bDaemonMode, "daemon_mode", kTrueType },
{ sOutputFile, "output_file", kStringType },
{ iHttpdPort, "httpd_port", kNumberType },
......@@ -448,5 +449,15 @@ bool jconf::parse_config(const char* sFilename)
}
#endif // _WIN32
if (prv->configValues[bFlushStdout]->IsBool())
{
bool bflush = prv->configValues[bFlushStdout]->GetBool();
printer::inst()->set_flush_stdout(bflush);
if (bflush)
{
printer::inst()->print_msg(L0, "Flush stdout forced.");
}
}
return true;
}
......@@ -156,6 +156,7 @@ printer::printer()
{
verbose_level = LINF;
logfile = nullptr;
b_flush_stdout = false;
}
bool printer::open_logfile(const char* file)
......@@ -193,6 +194,11 @@ void printer::print_msg(verbosity verbose, const char* fmt, ...)
std::unique_lock<std::mutex> lck(print_mutex);
fputs(buf, stdout);
if (b_flush_stdout)
{
fflush(stdout);
}
if(logfile != nullptr)
{
fputs(buf, logfile);
......
......@@ -35,6 +35,7 @@ public:
};
inline void set_verbose_level(size_t level) { verbose_level = (verbosity)level; }
inline void set_flush_stdout(bool status) { b_flush_stdout = status; }
void print_msg(verbosity verbose, const char* fmt, ...);
void print_str(const char* str);
bool open_logfile(const char* file);
......@@ -44,6 +45,7 @@ private:
std::mutex print_mutex;
verbosity verbose_level;
bool b_flush_stdout;
FILE* logfile;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment