Commit 6972ec62a76b50792fe053dfc777ba8a7025b220

Con Kolivas 2013-05-28T23:33:32

Execute driver shutdown sequence during kill_work.

diff --git a/cgminer.c b/cgminer.c
index 5ca8a56..fecdacb 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -2813,6 +2813,12 @@ static void __kill_work(void)
 		pthread_t *pth = NULL;
 
 		thr = get_thread(i);
+		if (thr) {
+			struct device_drv *drv = thr->cgpu->drv;
+
+			drv->thread_shutdown(thr);
+		}
+
 		if (thr && PTH(thr) != 0L)
 			pth = &thr->pth;
 		thr_info_cancel(thr);
@@ -5661,7 +5667,7 @@ static void hash_sole_work(struct thr_info *mythr)
 	sdiff.tv_sec = sdiff.tv_usec = 0;
 	cgtime(&tv_lastupdate);
 
-	while (42) {
+	while (likely(!cgpu->shutdown)) {
 		struct work *work = get_work(mythr, thr_id);
 		int64_t hashes;
 
@@ -5937,7 +5943,7 @@ void hash_queued_work(struct thr_info *mythr)
 	const int thr_id = mythr->id;
 	int64_t hashes_done = 0;
 
-	while (42) {
+	while (likely(!cgpu->shutdown)) {
 		struct timeval diff;
 		int64_t hashes;
 
diff --git a/miner.h b/miner.h
index 7daba4b..0a04e42 100644
--- a/miner.h
+++ b/miner.h
@@ -542,6 +542,8 @@ struct cgpu_info {
 	pthread_rwlock_t qlock;
 	struct work *queued_work;
 	unsigned int queued_count;
+
+	bool shutdown;
 };
 
 extern bool add_cgpu(struct cgpu_info*);