Browse Source

Execute driver shutdown sequence during kill_work.

Con Kolivas 13 years ago
parent
commit
6972ec62a7
2 changed files with 10 additions and 2 deletions
  1. 8 2
      cgminer.c
  2. 2 0
      miner.h

+ 8 - 2
cgminer.c

@@ -2813,6 +2813,12 @@ static void __kill_work(void)
 		pthread_t *pth = NULL;
 		pthread_t *pth = NULL;
 
 
 		thr = get_thread(i);
 		thr = get_thread(i);
+		if (thr) {
+			struct device_drv *drv = thr->cgpu->drv;
+
+			drv->thread_shutdown(thr);
+		}
+
 		if (thr && PTH(thr) != 0L)
 		if (thr && PTH(thr) != 0L)
 			pth = &thr->pth;
 			pth = &thr->pth;
 		thr_info_cancel(thr);
 		thr_info_cancel(thr);
@@ -5661,7 +5667,7 @@ static void hash_sole_work(struct thr_info *mythr)
 	sdiff.tv_sec = sdiff.tv_usec = 0;
 	sdiff.tv_sec = sdiff.tv_usec = 0;
 	cgtime(&tv_lastupdate);
 	cgtime(&tv_lastupdate);
 
 
-	while (42) {
+	while (likely(!cgpu->shutdown)) {
 		struct work *work = get_work(mythr, thr_id);
 		struct work *work = get_work(mythr, thr_id);
 		int64_t hashes;
 		int64_t hashes;
 
 
@@ -5937,7 +5943,7 @@ void hash_queued_work(struct thr_info *mythr)
 	const int thr_id = mythr->id;
 	const int thr_id = mythr->id;
 	int64_t hashes_done = 0;
 	int64_t hashes_done = 0;
 
 
-	while (42) {
+	while (likely(!cgpu->shutdown)) {
 		struct timeval diff;
 		struct timeval diff;
 		int64_t hashes;
 		int64_t hashes;
 
 

+ 2 - 0
miner.h

@@ -542,6 +542,8 @@ struct cgpu_info {
 	pthread_rwlock_t qlock;
 	pthread_rwlock_t qlock;
 	struct work *queued_work;
 	struct work *queued_work;
 	unsigned int queued_count;
 	unsigned int queued_count;
+
+	bool shutdown;
 };
 };
 
 
 extern bool add_cgpu(struct cgpu_info*);
 extern bool add_cgpu(struct cgpu_info*);