Compare commits

..

1 Commits

Author SHA1 Message Date
Jay D Dee
0e1e88f53e v3.12.4.3 2020-02-24 21:35:19 -05:00
4 changed files with 64 additions and 38 deletions

View File

@@ -65,6 +65,12 @@ If not what makes it happen or not happen?
Change Log
----------
v3.12.4.3
Fixed segfault in new block log for getwork.
Disabled silent discarding of stale work after the submit is logged.
v3.12.4.2
Issue #245: fixed getwork stale shares, solo mining with getwork now works.

20
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for cpuminer-opt 3.12.4.2.
# Generated by GNU Autoconf 2.69 for cpuminer-opt 3.12.4.3.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='cpuminer-opt'
PACKAGE_TARNAME='cpuminer-opt'
PACKAGE_VERSION='3.12.4.2'
PACKAGE_STRING='cpuminer-opt 3.12.4.2'
PACKAGE_VERSION='3.12.4.3'
PACKAGE_STRING='cpuminer-opt 3.12.4.3'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1332,7 +1332,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures cpuminer-opt 3.12.4.2 to adapt to many kinds of systems.
\`configure' configures cpuminer-opt 3.12.4.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1404,7 +1404,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of cpuminer-opt 3.12.4.2:";;
short | recursive ) echo "Configuration of cpuminer-opt 3.12.4.3:";;
esac
cat <<\_ACEOF
@@ -1509,7 +1509,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
cpuminer-opt configure 3.12.4.2
cpuminer-opt configure 3.12.4.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2012,7 +2012,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by cpuminer-opt $as_me 3.12.4.2, which was
It was created by cpuminer-opt $as_me 3.12.4.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2993,7 +2993,7 @@ fi
# Define the identity of the package.
PACKAGE='cpuminer-opt'
VERSION='3.12.4.2'
VERSION='3.12.4.3'
cat >>confdefs.h <<_ACEOF
@@ -6690,7 +6690,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by cpuminer-opt $as_me 3.12.4.2, which was
This file was extended by cpuminer-opt $as_me 3.12.4.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -6756,7 +6756,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
cpuminer-opt config.status 3.12.4.2
cpuminer-opt config.status 3.12.4.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT([cpuminer-opt], [3.12.4.2])
AC_INIT([cpuminer-opt], [3.12.4.3])
AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM

View File

@@ -1062,25 +1062,39 @@ static int share_result( int result, struct work *null_work,
if ( likely( result ) )
{
accepted_share_count++;
sprintf( sres, "S%d", stale_share_count );
sprintf( rres, "R%d", rejected_share_count );
if unlikely( ( my_stats.net_diff > 0. )
&& ( my_stats.share_diff >= net_diff ) )
{
solved = true;
solved_block_count++;
sprintf( bres, "BLOCK SOLVED %d", solved_block_count );
sprintf( ares, "A%d", accepted_share_count );
}
else
{
sprintf( bres, "B%d", solved_block_count );
sprintf( ares, "Accepted %d", accepted_share_count );
}
}
else
{
sprintf( ares, "A%d", accepted_share_count );
sprintf( bres, "B%d", solved_block_count );
if ( reason && strstr( reason, "Invalid job id" ) )
{
stale = true;
stale_share_count++;
sprintf( sres, "Stale %d", stale_share_count );
sprintf( rres, "R%d", rejected_share_count );
}
else
{
rejected_share_count++;
sprintf( sres, "S%d", stale_share_count );
sprintf( rres, "Rejected %d" , rejected_share_count );
lowdiff_debug = true;
}
}
@@ -1106,6 +1120,7 @@ static int share_result( int result, struct work *null_work,
pthread_mutex_unlock( &stats_lock );
/*
if ( likely( result ) )
{
if ( unlikely( solved ) )
@@ -1136,6 +1151,7 @@ static int share_result( int result, struct work *null_work,
sprintf( rres, "Rejected %d" , rejected_share_count );
}
}
*/
if ( use_colors )
{
@@ -1163,8 +1179,7 @@ static int share_result( int result, struct work *null_work,
scol, my_stats.job_id );
else
applog2( LOG_NOTICE, "Diff %.5g (%.3g%), %sBlock %d" CL_WHT,
my_stats.share_diff, share_ratio, bcol, stratum.block_height,
scol );
my_stats.share_diff, share_ratio, bcol, stratum.block_height );
}
if ( unlikely( reason && !result ) )
@@ -1198,6 +1213,9 @@ static int share_result( int result, struct work *null_work,
return 1;
}
static const char *json_submit_req =
"{\"method\": \"mining.submit\", \"params\": [\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"], \"id\":4}";
void std_le_build_stratum_request( char *req, struct work *work )
{
unsigned char *xnonce2str;
@@ -1208,9 +1226,8 @@ void std_le_build_stratum_request( char *req, struct work *work )
bin2hex( ntimestr, (char*)(&ntime), sizeof(uint32_t) );
bin2hex( noncestr, (char*)(&nonce), sizeof(uint32_t) );
xnonce2str = abin2hex( work->xnonce2, work->xnonce2_len );
snprintf( req, JSON_BUF_LEN,
"{\"method\": \"mining.submit\", \"params\": [\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"], \"id\":4}",
rpc_user, work->job_id, xnonce2str, ntimestr, noncestr );
snprintf( req, JSON_BUF_LEN, json_submit_req, rpc_user, work->job_id,
xnonce2str, ntimestr, noncestr );
free( xnonce2str );
}
@@ -1225,12 +1242,14 @@ void std_be_build_stratum_request( char *req, struct work *work )
bin2hex( ntimestr, (char*)(&ntime), sizeof(uint32_t) );
bin2hex( noncestr, (char*)(&nonce), sizeof(uint32_t) );
xnonce2str = abin2hex( work->xnonce2, work->xnonce2_len );
snprintf( req, JSON_BUF_LEN,
"{\"method\": \"mining.submit\", \"params\": [\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"], \"id\":4}",
rpc_user, work->job_id, xnonce2str, ntimestr, noncestr );
snprintf( req, JSON_BUF_LEN, json_submit_req, rpc_user, work->job_id,
xnonce2str, ntimestr, noncestr );
free( xnonce2str );
}
static const char *json_getwork_req =
"{\"method\": \"getwork\", \"params\": [\"%s\"], \"id\":4}\r\n";
bool std_le_submit_getwork_result( CURL *curl, struct work *work )
{
char req[JSON_BUF_LEN];
@@ -1247,8 +1266,7 @@ bool std_le_submit_getwork_result( CURL *curl, struct work *work )
return false;
}
// build JSON-RPC request
snprintf( req, JSON_BUF_LEN,
"{\"method\": \"getwork\", \"params\": [\"%s\"], \"id\":4}\r\n", gw_str );
snprintf( req, JSON_BUF_LEN, json_getwork_req, gw_str );
free( gw_str );
// issue JSON-RPC request
val = json_rpc_call( curl, rpc_url, rpc_userpass, req, NULL, 0 );
@@ -1281,8 +1299,7 @@ bool std_be_submit_getwork_result( CURL *curl, struct work *work )
return false;
}
// build JSON-RPC request
snprintf( req, JSON_BUF_LEN,
"{\"method\": \"getwork\", \"params\": [\"%s\"], \"id\":4}\r\n", gw_str );
snprintf( req, JSON_BUF_LEN, json_getwork_req, gw_str );
free( gw_str );
// issue JSON-RPC request
val = json_rpc_call( curl, rpc_url, rpc_userpass, req, NULL, 0 );
@@ -1337,25 +1354,27 @@ char* std_malloc_txs_request( struct work *work )
static bool submit_upstream_work( CURL *curl, struct work *work )
{
/* pass if the previous hash is not the current previous hash */
/* Submit anyway, discardring here messes up the stats
if ( !submit_old && memcmp( &work->data[1], &g_work.data[1], 32 ) )
{
if (opt_debug)
applog(LOG_DEBUG, "DEBUG: stale work detected, discarding");
applog( LOG_WARNING, "Stale work detected, discarding" );
return true;
}
if ( !have_stratum && allow_mininginfo )
{
struct work wheight;
get_mininginfo( curl, &wheight );
if ( work->height && work->height <= net_blocks )
struct work mining_info;
get_mininginfo( curl, &mining_info );
if ( work->height < mining_info.height )
{
if (opt_debug)
applog(LOG_WARNING, "block %u was already solved", work->height);
applog( LOG_WARNING, "Block %u was already solved, current block %d",
work->height, mining_info.height );
return true;
}
}
*/
if ( have_stratum )
{
@@ -1488,7 +1507,8 @@ start:
// store work height in solo
get_mininginfo(curl, work);
applog( LOG_BLUE, "%s %s block %d, diff %.5g", work->height, net_diff );
applog( LOG_BLUE, "%s %s block %d, diff %.5g", algo_names[ opt_algo ],
short_url, work->height, net_diff );
if ( !opt_quiet && net_diff && net_hashrate )
{
@@ -1907,17 +1927,15 @@ void std_get_new_work( struct work* work, struct work* g_work, int thr_id,
uint32_t *end_nonce_ptr )
{
uint32_t *nonceptr = work->data + algo_gate.nonce_index;
bool force_new_work;
bool force_new_work = false;
if ( have_stratum )
force_new_work = work->job_id ? strtoul( work->job_id, NULL, 16 )
!= strtoul( g_work->job_id, NULL, 16 )
: true;
else
force_new_work = memcmp( work->data, g_work->data,
algo_gate.work_cmp_size );
: false;
if ( force_new_work || *nonceptr >= *end_nonce_ptr )
if ( force_new_work || ( *nonceptr >= *end_nonce_ptr )
|| memcmp( work->data, g_work->data, algo_gate.work_cmp_size ) )
{
work_free( work );
work_copy( work, g_work );
@@ -2287,6 +2305,8 @@ void restart_threads(void)
{
for ( int i = 0; i < opt_n_threads; i++)
work_restart[i].restart = 1;
if ( opt_debug )
applog( LOG_INFO, "Threads restarted for new work.");
}
json_t *std_longpoll_rpc_call( CURL *curl, int *err, char* lp_url )