Avoid allocing and freeing stratum strings that should be fixed length.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
diff --git a/miner.h b/miner.h
index 6e1c96a..008688a 100644
--- a/miner.h
+++ b/miner.h
@@ -1263,10 +1263,10 @@ struct pool {
unsigned char header_bin[128];
int merkles;
int merkle_offset;
- char *prev_hash;
- char *bbversion;
- char *nbit;
- char *ntime;
+ char prev_hash[68];
+ char bbversion[12];
+ char nbit[12];
+ char ntime[12];
struct timeval tv_lastwork;
};
diff --git a/util.c b/util.c
index 8b12fdc..a70b611 100644
--- a/util.c
+++ b/util.c
@@ -1614,46 +1614,34 @@ static bool parse_notify(struct pool *pool, json_t *val)
merkles = json_array_size(arr);
job_id = json_array_string(val, 0);
- prev_hash = json_array_string(val, 1);
+ prev_hash = __json_array_string(val, 1);
coinbase1 = json_array_string(val, 2);
coinbase2 = json_array_string(val, 3);
- bbversion = json_array_string(val, 5);
- nbit = json_array_string(val, 6);
- ntime = json_array_string(val, 7);
+ bbversion = __json_array_string(val, 5);
+ nbit = __json_array_string(val, 6);
+ ntime = __json_array_string(val, 7);
clean = json_is_true(json_array_get(val, 8));
if (!job_id || !prev_hash || !coinbase1 || !coinbase2 || !bbversion || !nbit || !ntime) {
/* Annoying but we must not leak memory */
if (job_id)
free(job_id);
- if (prev_hash)
- free(prev_hash);
if (coinbase1)
free(coinbase1);
if (coinbase2)
free(coinbase2);
- if (bbversion)
- free(bbversion);
- if (nbit)
- free(nbit);
- if (ntime)
- free(ntime);
goto out;
}
cg_wlock(&pool->data_lock);
free(pool->swork.job_id);
- free(pool->prev_hash);
- free(pool->bbversion);
- free(pool->nbit);
- free(pool->ntime);
pool->swork.job_id = job_id;
- pool->prev_hash = prev_hash;
+ snprintf(pool->prev_hash, 65, "%s", prev_hash);
cb1_len = strlen(coinbase1) / 2;
cb2_len = strlen(coinbase2) / 2;
- pool->bbversion = bbversion;
- pool->nbit = nbit;
- pool->ntime = ntime;
+ snprintf(pool->bbversion, 9, "%s", bbversion);
+ snprintf(pool->nbit, 9, "%s", nbit);
+ snprintf(pool->ntime, 9, "%s", ntime);
pool->swork.clean = clean;
alloc_len = pool->coinbase_len = cb1_len + pool->n1_len + pool->n2size + cb2_len;
pool->nonce2_offset = cb1_len + pool->n1_len;