Merge xmrig v6.19.0 into master
This commit is contained in:
commit
b8b5b8003b
59 changed files with 9049 additions and 7092 deletions
|
@ -16,10 +16,12 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#ifdef XMRIG_OS_FREEBSD
|
||||
# include <sys/types.h>
|
||||
# include <sys/param.h>
|
||||
# include <sys/cpuset.h>
|
||||
# ifndef __DragonFly__
|
||||
# include <sys/cpuset.h>
|
||||
# endif
|
||||
# include <pthread_np.h>
|
||||
#endif
|
||||
|
||||
|
@ -41,11 +43,6 @@
|
|||
#include "version.h"
|
||||
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
typedef cpuset_t cpu_set_t;
|
||||
#endif
|
||||
|
||||
|
||||
char *xmrig::Platform::createUserAgent()
|
||||
{
|
||||
constexpr const size_t max = 256;
|
||||
|
@ -74,6 +71,19 @@ char *xmrig::Platform::createUserAgent()
|
|||
|
||||
|
||||
#ifndef XMRIG_FEATURE_HWLOC
|
||||
#ifdef __DragonFly__
|
||||
|
||||
bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#ifdef XMRIG_OS_FREEBSD
|
||||
typedef cpuset_t cpu_set_t;
|
||||
#endif
|
||||
|
||||
bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id)
|
||||
{
|
||||
cpu_set_t mn;
|
||||
|
@ -89,7 +99,9 @@ bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id)
|
|||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __DragonFly__
|
||||
#endif // XMRIG_FEATURE_HWLOC
|
||||
|
||||
|
||||
void xmrig::Platform::setProcessPriority(int)
|
||||
|
|
|
@ -251,6 +251,7 @@ void xmrig::BaseTransform::transform(rapidjson::Document &doc, int key, const ch
|
|||
case IConfig::HttpPort: /* --http-port */
|
||||
case IConfig::DonateLevelKey: /* --donate-level */
|
||||
case IConfig::DaemonPollKey: /* --daemon-poll-interval */
|
||||
case IConfig::DaemonJobTimeoutKey: /* --daemon-job-timeout */
|
||||
case IConfig::DnsTtlKey: /* --dns-ttl */
|
||||
case IConfig::DaemonZMQPortKey: /* --daemon-zmq-port */
|
||||
return transformUint64(doc, key, static_cast<uint64_t>(strtol(arg, nullptr, 10)));
|
||||
|
@ -377,6 +378,9 @@ void xmrig::BaseTransform::transformUint64(rapidjson::Document &doc, int key, ui
|
|||
case IConfig::DaemonPollKey: /* --daemon-poll-interval */
|
||||
return add(doc, Pools::kPools, Pool::kDaemonPollInterval, arg);
|
||||
|
||||
case IConfig::DaemonJobTimeoutKey: /* --daemon-job-timeout */
|
||||
return add(doc, Pools::kPools, Pool::kDaemonJobTimeout, arg);
|
||||
|
||||
case IConfig::DaemonZMQPortKey: /* --daemon-zmq-port */
|
||||
return add(doc, Pools::kPools, Pool::kDaemonZMQPort, arg);
|
||||
# endif
|
||||
|
|
|
@ -88,6 +88,7 @@ public:
|
|||
DaemonZMQPortKey = 1056,
|
||||
HugePagesJitKey = 1057,
|
||||
RotationKey = 1058,
|
||||
DaemonJobTimeoutKey = 1059,
|
||||
|
||||
// xmrig common
|
||||
CPUPriorityKey = 1021,
|
||||
|
|
|
@ -1020,7 +1020,7 @@ void xmrig::Client::onConnect(uv_connect_t *req, int status)
|
|||
|
||||
if (status < 0) {
|
||||
if (!client->isQuiet()) {
|
||||
LOG_ERR("%s " RED("connect error: ") RED_BOLD("\"%s\""), client->tag(), uv_strerror(status));
|
||||
LOG_ERR("%s %s " RED("connect error: ") RED_BOLD("\"%s\""), client->tag(), client->ip().data(), uv_strerror(status));
|
||||
}
|
||||
|
||||
if (client->state() == ReconnectingState || client->state() == ClosingState) {
|
||||
|
|
|
@ -303,6 +303,18 @@ void xmrig::DaemonClient::onHttpData(const HttpData &data)
|
|||
|
||||
void xmrig::DaemonClient::onTimer(const Timer *)
|
||||
{
|
||||
if (m_pool.zmq_port() >= 0) {
|
||||
m_prevHash = nullptr;
|
||||
m_blocktemplateRequestHash = nullptr;
|
||||
send(kGetHeight);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Chrono::steadyMSecs() >= m_jobSteadyMs + m_pool.jobTimeout()) {
|
||||
m_prevHash = nullptr;
|
||||
m_blocktemplateRequestHash = nullptr;
|
||||
}
|
||||
|
||||
if (m_state == ConnectingState) {
|
||||
connect();
|
||||
}
|
||||
|
@ -352,7 +364,7 @@ void xmrig::DaemonClient::onResolved(const DnsRecords &records, int status, cons
|
|||
|
||||
bool xmrig::DaemonClient::isOutdated(uint64_t height, const char *hash) const
|
||||
{
|
||||
return m_job.height() != height || m_prevHash != hash;
|
||||
return m_job.height() != height || m_prevHash != hash || Chrono::steadyMSecs() >= m_jobSteadyMs + m_pool.jobTimeout();
|
||||
}
|
||||
|
||||
|
||||
|
@ -468,6 +480,7 @@ bool xmrig::DaemonClient::parseJob(const rapidjson::Value ¶ms, int *code)
|
|||
m_job = std::move(job);
|
||||
m_blocktemplateStr = std::move(blocktemplate);
|
||||
m_prevHash = Json::getString(params, "prev_hash");
|
||||
m_jobSteadyMs = Chrono::steadyMSecs();
|
||||
|
||||
if (m_state == ConnectingState) {
|
||||
setState(ConnectedState);
|
||||
|
@ -596,6 +609,10 @@ void xmrig::DaemonClient::setState(SocketState state)
|
|||
const uint64_t interval = std::max<uint64_t>(20, m_pool.pollInterval());
|
||||
m_timer->start(interval, interval);
|
||||
}
|
||||
else {
|
||||
const uint64_t t = m_pool.jobTimeout();
|
||||
m_timer->start(t, t);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -865,7 +882,12 @@ void xmrig::DaemonClient::ZMQParse()
|
|||
// Clear previous hash and check daemon height to guarantee that xmrig will call get_block_template RPC later
|
||||
// We can't call get_block_template directly because daemon is not ready yet
|
||||
m_prevHash = nullptr;
|
||||
m_blocktemplateRequestHash = nullptr;
|
||||
send(kGetHeight);
|
||||
|
||||
const uint64_t t = m_pool.jobTimeout();
|
||||
m_timer->stop();
|
||||
m_timer->start(t, t);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ private:
|
|||
String m_blocktemplateStr;
|
||||
String m_currentJobId;
|
||||
String m_prevHash;
|
||||
uint64_t m_jobSteadyMs = 0;
|
||||
String m_tlsFingerprint;
|
||||
String m_tlsVersion;
|
||||
Timer *m_timer;
|
||||
|
|
|
@ -65,6 +65,7 @@ const char *Pool::kAlgo = "algo";
|
|||
const char *Pool::kCoin = "coin";
|
||||
const char *Pool::kDaemon = "daemon";
|
||||
const char *Pool::kDaemonPollInterval = "daemon-poll-interval";
|
||||
const char *Pool::kDaemonJobTimeout = "daemon-job-timeout";
|
||||
const char *Pool::kDaemonZMQPort = "daemon-zmq-port";
|
||||
const char *Pool::kEnabled = "enabled";
|
||||
const char *Pool::kFingerprint = "tls-fingerprint";
|
||||
|
@ -88,6 +89,7 @@ const char *Pool::kNicehashHost = "nicehash.com";
|
|||
xmrig::Pool::Pool(const char *url) :
|
||||
m_flags(1 << FLAG_ENABLED),
|
||||
m_pollInterval(kDefaultPollInterval),
|
||||
m_jobTimeout(kDefaultJobTimeout),
|
||||
m_url(url)
|
||||
{
|
||||
}
|
||||
|
@ -101,6 +103,7 @@ xmrig::Pool::Pool(const char *host, uint16_t port, const char *user, const char
|
|||
m_user(user),
|
||||
m_spendSecretKey(spendSecretKey),
|
||||
m_pollInterval(kDefaultPollInterval),
|
||||
m_jobTimeout(kDefaultJobTimeout),
|
||||
m_url(host, port, tls)
|
||||
{
|
||||
m_flags.set(FLAG_NICEHASH, nicehash || strstr(host, kNicehashHost));
|
||||
|
@ -111,6 +114,7 @@ xmrig::Pool::Pool(const char *host, uint16_t port, const char *user, const char
|
|||
xmrig::Pool::Pool(const rapidjson::Value &object) :
|
||||
m_flags(1 << FLAG_ENABLED),
|
||||
m_pollInterval(kDefaultPollInterval),
|
||||
m_jobTimeout(kDefaultJobTimeout),
|
||||
m_url(Json::getString(object, kUrl))
|
||||
{
|
||||
if (!m_url.isValid()) {
|
||||
|
@ -123,6 +127,7 @@ xmrig::Pool::Pool(const rapidjson::Value &object) :
|
|||
m_rigId = Json::getString(object, kRigId);
|
||||
m_fingerprint = Json::getString(object, kFingerprint);
|
||||
m_pollInterval = Json::getUint64(object, kDaemonPollInterval, kDefaultPollInterval);
|
||||
m_jobTimeout = Json::getUint64(object, kDaemonJobTimeout, kDefaultJobTimeout);
|
||||
m_algorithm = Json::getString(object, kAlgo);
|
||||
m_coin = Json::getString(object, kCoin);
|
||||
m_daemon = Json::getString(object, kSelfSelect);
|
||||
|
@ -207,6 +212,7 @@ bool xmrig::Pool::isEqual(const Pool &other) const
|
|||
&& m_url == other.m_url
|
||||
&& m_user == other.m_user
|
||||
&& m_pollInterval == other.m_pollInterval
|
||||
&& m_jobTimeout == other.m_jobTimeout
|
||||
&& m_daemon == other.m_daemon
|
||||
&& m_proxy == other.m_proxy
|
||||
);
|
||||
|
@ -299,6 +305,7 @@ rapidjson::Value xmrig::Pool::toJSON(rapidjson::Document &doc) const
|
|||
|
||||
if (m_mode == MODE_DAEMON) {
|
||||
obj.AddMember(StringRef(kDaemonPollInterval), m_pollInterval, allocator);
|
||||
obj.AddMember(StringRef(kDaemonJobTimeout), m_jobTimeout, allocator);
|
||||
obj.AddMember(StringRef(kDaemonZMQPort), m_zmqPort, allocator);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -61,6 +61,7 @@ public:
|
|||
static const char *kCoin;
|
||||
static const char *kDaemon;
|
||||
static const char *kDaemonPollInterval;
|
||||
static const char* kDaemonJobTimeout;
|
||||
static const char *kEnabled;
|
||||
static const char *kFingerprint;
|
||||
static const char *kKeepalive;
|
||||
|
@ -80,6 +81,7 @@ public:
|
|||
constexpr static int kKeepAliveTimeout = 60;
|
||||
constexpr static uint16_t kDefaultPort = 3333;
|
||||
constexpr static uint64_t kDefaultPollInterval = 1000;
|
||||
constexpr static uint64_t kDefaultJobTimeout = 15000;
|
||||
|
||||
Pool() = default;
|
||||
Pool(const char *host, uint16_t port, const char *user, const char *password, const char* spendSecretKey, int keepAlive, bool nicehash, bool tls, Mode mode);
|
||||
|
@ -112,6 +114,7 @@ public:
|
|||
inline uint16_t port() const { return m_url.port(); }
|
||||
inline int zmq_port() const { return m_zmqPort; }
|
||||
inline uint64_t pollInterval() const { return m_pollInterval; }
|
||||
inline uint64_t jobTimeout() const { return m_jobTimeout; }
|
||||
inline void setAlgo(const Algorithm &algorithm) { m_algorithm = algorithm; }
|
||||
inline void setUrl(const char *url) { m_url = Url(url); }
|
||||
inline void setPassword(const String &password) { m_password = password; }
|
||||
|
@ -162,6 +165,7 @@ private:
|
|||
String m_user;
|
||||
String m_spendSecretKey;
|
||||
uint64_t m_pollInterval = kDefaultPollInterval;
|
||||
uint64_t m_jobTimeout = kDefaultJobTimeout;
|
||||
Url m_daemon;
|
||||
Url m_url;
|
||||
int m_zmqPort = -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue