Browse Source

klondike - single 'shutdown' and ensure it happens

nfactor-troky
Kano 11 years ago
parent
commit
50c8377305
  1. 17
      driver-klondike.c

17
driver-klondike.c

@ -199,7 +199,6 @@ typedef struct jobque {
} JOBQUE; } JOBQUE;
struct klondike_info { struct klondike_info {
bool shutdown;
pthread_rwlock_t stat_lock; pthread_rwlock_t stat_lock;
struct thr_info replies_thr; struct thr_info replies_thr;
cglock_t klist_lock; cglock_t klist_lock;
@ -540,7 +539,7 @@ static KLIST *GetReply(struct cgpu_info *klncgpu, uint8_t cmd, uint8_t dev)
KLIST *kitem; KLIST *kitem;
int retries = CMD_REPLY_RETRIES; int retries = CMD_REPLY_RETRIES;
while (retries-- > 0 && klninfo->shutdown == false) { while (retries-- > 0 && klncgpu->shutdown == false) {
cgsleep_ms(REPLY_WAIT_TIME); cgsleep_ms(REPLY_WAIT_TIME);
cg_rlock(&klninfo->klist_lock); cg_rlock(&klninfo->klist_lock);
kitem = klninfo->used; kitem = klninfo->used;
@ -953,7 +952,7 @@ static void *klondike_get_replies(void *userdata)
applog(LOG_DEBUG, "%s%i: listening for replies", applog(LOG_DEBUG, "%s%i: listening for replies",
klncgpu->drv->name, klncgpu->device_id); klncgpu->drv->name, klncgpu->device_id);
while (klninfo->shutdown == false) { while (klncgpu->shutdown == false) {
if (klncgpu->usbinfo.nodev) if (klncgpu->usbinfo.nodev)
return NULL; return NULL;
@ -1028,7 +1027,7 @@ static void *klondike_get_replies(void *userdata)
dev, (char)(kitem->kline.ws.cmd), dev, (char)(kitem->kline.ws.cmd),
(int)(kitem->kline.ws.slavecount), (int)(kitem->kline.ws.slavecount),
slaves); slaves);
klninfo->shutdown = true; klncgpu->shutdown = true;
break; break;
} }
@ -1054,7 +1053,7 @@ static void *klondike_get_replies(void *userdata)
klncgpu->drv->name, klncgpu->drv->name,
klncgpu->device_id, klncgpu->device_id,
dev); dev);
klninfo->shutdown = true; klncgpu->shutdown = true;
} }
kln_disable(klncgpu, dev, false); kln_disable(klncgpu, dev, false);
} }
@ -1157,7 +1156,7 @@ static void klondike_shutdown(struct thr_info *thr)
kln_disable(klncgpu, klninfo->status[0].kline.ws.slavecount, true); kln_disable(klncgpu, klninfo->status[0].kline.ws.slavecount, true);
klncgpu->shutdown = klninfo->shutdown = true; klncgpu->shutdown = true;
} }
static void klondike_thread_enable(struct thr_info *thr) static void klondike_thread_enable(struct thr_info *thr)
@ -1272,7 +1271,7 @@ static bool klondike_queue_full(struct cgpu_info *klncgpu)
rd_unlock(&(klninfo->stat_lock)); rd_unlock(&(klninfo->stat_lock));
applog(LOG_ERR, "%s%i:%d reset failed - dropping device", applog(LOG_ERR, "%s%i:%d reset failed - dropping device",
klncgpu->drv->name, klncgpu->device_id, dev); klncgpu->drv->name, klncgpu->device_id, dev);
klninfo->shutdown = true; klncgpu->shutdown = true;
return false; return false;
} }
break; break;
@ -1360,6 +1359,10 @@ static int64_t klondike_scanwork(struct thr_info *thr)
klninfo->noncecount = 0; klninfo->noncecount = 0;
rd_unlock(&(klninfo->stat_lock)); rd_unlock(&(klninfo->stat_lock));
} }
if (klncgpu->shutdown)
return -1;
else
return newhashcount; return newhashcount;
} }

Loading…
Cancel
Save