Merge remote-tracking branch 'conman/master'
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
diff --git a/README b/README
index 7cd8478..7e59bd7 100644
--- a/README
+++ b/README
@@ -136,6 +136,7 @@ CGMiner specific configuration options:
support
--without-curses Compile support for curses TUI (default enabled)
--with-system-libusb Compile against dynamic system libusb (default use
+ included static libusb)
Basic *nix build instructions:
To actually build:
diff --git a/cgminer.c b/cgminer.c
index f9bf561..6769f92 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -1774,7 +1774,7 @@ void clean_work(struct work *work)
/* All dynamically allocated work structs should be freed here to not leak any
* ram from arrays allocated within the work struct */
-void free_work(struct work *work)
+void _free_work(struct work *work)
{
clean_work(work);
free(work);
@@ -1903,7 +1903,6 @@ static void gen_gbt_work(struct pool *pool, struct work *work)
local_work++;
work->pool = pool;
work->gbt = true;
- work->id = total_work_inc();
work->longpoll = false;
work->getwork_mode = GETWORK_MODE_GBT;
work->work_block = work_block;
@@ -3990,7 +3989,12 @@ struct work *make_clone(struct work *work)
return work_clone;
}
-static void stage_work(struct work *work);
+static void _stage_work(struct work *work);
+
+#define stage_work(WORK) do { \
+ _stage_work(WORK); \
+ WORK = NULL; \
+} while (0)
static bool clone_available(void)
{
@@ -4375,7 +4379,7 @@ void switch_pools(struct pool *selected)
}
-void discard_work(struct work *work)
+void _discard_work(struct work *work)
{
if (!work->clone && !work->rolls && !work->mined) {
if (work->pool) {
@@ -4718,7 +4722,7 @@ static bool hash_push(struct work *work)
return rc;
}
-static void stage_work(struct work *work)
+static void _stage_work(struct work *work)
{
applog(LOG_DEBUG, "Pushing work from pool %d to hash queue", work->pool->pool_no);
work->work_block = work_block;
@@ -6821,7 +6825,6 @@ static void gen_stratum_work(struct pool *pool, struct work *work)
work->pool = pool;
work->stratum = true;
work->nonce = 0;
- work->id = total_work_inc();
work->longpoll = false;
work->getwork_mode = GETWORK_MODE_STRATUM;
work->work_block = work_block;
@@ -6963,7 +6966,6 @@ static void gen_solo_work(struct pool *pool, struct work *work)
work->gbt = true;
work->pool = pool;
work->nonce = 0;
- work->id = total_work_inc();
work->longpoll = false;
work->getwork_mode = GETWORK_MODE_SOLO;
work->work_block = work_block;
@@ -6994,7 +6996,6 @@ struct work *get_work(struct thr_info *thr, const int thr_id)
work = hash_pop(true);
if (stale_work(work, false)) {
discard_work(work);
- work = NULL;
wake_gws();
}
}
@@ -7172,7 +7173,6 @@ bool submit_noffset_nonce(struct thr_info *thr, struct work *work_in, uint32_t n
inc_hw_errors(thr);
goto out;
}
- ret = true;
update_work_stats(thr, work);
if (opt_benchfile && opt_benchfile_display)
@@ -7183,6 +7183,7 @@ bool submit_noffset_nonce(struct thr_info *thr, struct work *work_in, uint32_t n
thr->cgpu->device_id);
goto out;
}
+ ret = true;
submit_work_async(work);
out:
@@ -7414,7 +7415,6 @@ struct work *get_queued(struct cgpu_info *cgpu)
work = cgpu->unqueued_work;
if (unlikely(stale_work(work, false))) {
discard_work(work);
- work = NULL;
wake_gws();
} else
__add_queued(cgpu, work);
@@ -9116,6 +9116,7 @@ static void initialise_usb(void) {
int main(int argc, char *argv[])
{
struct sigaction handler;
+ struct work *work = NULL;
bool pool_msg = false;
struct thr_info *thr;
struct block *block;
@@ -9521,7 +9522,6 @@ begin_bench:
int ts, max_staged = max_queue;
struct pool *pool, *cp;
bool lagging = false;
- struct work *work;
if (opt_work_update)
signal_work_update();
@@ -9566,6 +9566,8 @@ begin_bench:
continue;
}
+ if (work)
+ discard_work(work);
work = make_work();
if (lagging && !pool_tset(cp, &cp->lagging)) {
@@ -9658,6 +9660,7 @@ retry:
cgsleep_ms(5000);
push_curl_entry(ce, pool);
pool = select_pool(!opt_fail_only);
+ free_work(work);
goto retry;
}
if (ts >= max_staged)
diff --git a/configure.ac b/configure.ac
index 5d6bb3b..6c0fe49 100644
--- a/configure.ac
+++ b/configure.ac
@@ -106,13 +106,6 @@ case $target in
;;
esac
-have_cgminer_sdk=false
-if test -n "$CGMINER_SDK"; then
- have_cgminer_sdk=true
- CPPFLAGS="-I$CGMINER_SDK/include $CPPFLAGS"
- LDFLAGS="-L$CGMINER_SDK/lib/$target $LDFLAGS"
-fi
-
has_winpthread=false
if test "x$have_win32" = xtrue; then
has_winpthread=true
diff --git a/miner.h b/miner.h
index 276e765..42a0782 100644
--- a/miner.h
+++ b/miner.h
@@ -1430,7 +1430,11 @@ extern int curses_int(const char *query);
extern char *curses_input(const char *query);
extern void kill_work(void);
extern void switch_pools(struct pool *selected);
-extern void discard_work(struct work *work);
+extern void _discard_work(struct work *work);
+#define discard_work(WORK) do { \
+ _discard_work(WORK); \
+ WORK = NULL; \
+} while (0)
extern void remove_pool(struct pool *pool);
extern void write_config(FILE *fcfg);
extern void zero_bestshare(void);
@@ -1452,7 +1456,11 @@ extern void app_restart(void);
extern void roll_work(struct work *work);
extern struct work *make_clone(struct work *work);
extern void clean_work(struct work *work);
-extern void free_work(struct work *work);
+extern void _free_work(struct work *work);
+#define free_work(WORK) do { \
+ _free_work(WORK); \
+ WORK = NULL; \
+} while (0)
extern void set_work_ntime(struct work *work, int ntime);
extern struct work *copy_work_noffset(struct work *base_work, int noffset);
#define copy_work(work_in) copy_work_noffset(work_in, 0)