Browse Source

Freeze the queues on all threads that are sent the pause message to prevent them trying to start up again with saved pings in their queues.

nfactor-troky
Con Kolivas 13 years ago
parent
commit
06721957a0
  1. 1
      cgminer.c
  2. 1
      miner.h
  3. 24
      util.c

1
cgminer.c

@ -1702,6 +1702,7 @@ void kill_work(void)
/* Stop the mining threads*/ /* Stop the mining threads*/
for (i = 0; i < mining_threads; i++) { for (i = 0; i < mining_threads; i++) {
thr = &thr_info[i]; thr = &thr_info[i];
thr_info_freeze(thr);
thr->pause = true; thr->pause = true;
} }

1
miner.h

@ -280,6 +280,7 @@ struct thr_info {
extern int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (void *), void *arg); extern int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (void *), void *arg);
extern void thr_info_cancel(struct thr_info *thr); extern void thr_info_cancel(struct thr_info *thr);
extern void thr_info_freeze(struct thr_info *thr);
struct string_elist { struct string_elist {

24
util.c

@ -668,13 +668,31 @@ int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (
return ret; return ret;
} }
void thr_info_cancel(struct thr_info *thr) void thr_info_freeze(struct thr_info *thr)
{ {
struct tq_ent *ent, *iter;
struct thread_q *tq;
if (!thr) if (!thr)
return; return;
if (thr->q) tq = thr->q;
tq_freeze(thr->q); if (!tq)
return;
mutex_lock(&tq->mutex);
tq->frozen = true;
list_for_each_entry_safe(ent, iter, &tq->q, q_node) {
list_del(&ent->q_node);
free(ent);
}
mutex_unlock(&tq->mutex);
}
void thr_info_cancel(struct thr_info *thr)
{
if (!thr)
return;
if (PTH(thr) != 0L) { if (PTH(thr) != 0L) {
pthread_cancel(thr->pth); pthread_cancel(thr->pth);

Loading…
Cancel
Save