diff --git a/src/generator.c b/src/generator.c index f4f5da80..26e03b67 100644 --- a/src/generator.c +++ b/src/generator.c @@ -209,6 +209,7 @@ static int gen_loop(proc_instance_t *pi) { int sockd = -1, ret = 0, selret; server_instance_t *si = NULL; + bool reconnecting = false; unixsock_t *us = &pi->us; ckpool_t *ckp = pi->ckp; bool started = false; @@ -218,14 +219,20 @@ static int gen_loop(proc_instance_t *pi) char hash[68]; reconnect: - if (si) + if (si) { kill_server(si); + reconnecting = true; + } si = live_server(ckp); if (!si) goto out; gbt = si->data; cs = &si->cs; + if (reconnecting) { + LOGWARNING("Failed over to bitcoind: %s:%s", cs->url, cs->port); + reconnecting = false; + } retry: do { @@ -238,7 +245,7 @@ retry: } while (selret < 1); if (unlikely(cs->fd < 0)) { - LOGWARNING("Bitcoind socket invalidated, will atempt failover"); + LOGWARNING("Bitcoind socket invalidated, will attempt failover"); goto reconnect; } diff --git a/src/stratifier.c b/src/stratifier.c index f4806eeb..0b20f3a2 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -1254,11 +1254,12 @@ static json_t *parse_subscribe(int64_t client_id, json_t *params_val) * user or creates a new one. */ static user_instance_t *authorise_user(const char *workername) { - char *username = strdupa(workername); + char *base_username = strdupa(workername), *username; user_instance_t *instance; - username = strsep(&username, "."); - username = strsep(&username, "_"); + username = strsep(&base_username, "._"); + if (!username || !strlen(username)) + username = base_username; if (strlen(username) > 127) username[127] = '\0'; @@ -1392,7 +1393,7 @@ static json_t *parse_authorise(stratum_instance_t *client, json_t *params_val, j *err_val = json_string("Empty workername parameter"); goto out; } - if (!memcmp(buf, ".", 1)) { + if (!memcmp(buf, ".", 1) || !memcmp(buf, "_", 1)) { *err_val = json_string("Empty username parameter"); goto out; }