Browse Source

Use control_lock to protect thr->pth for thread creation/destruction.

nfactor-troky
Con Kolivas 13 years ago
parent
commit
b69aa23470
  1. 1
      miner.h
  2. 6
      util.c

1
miner.h

@ -453,6 +453,7 @@ extern int total_getworks, total_stale, total_discarded;
extern unsigned int local_work; extern unsigned int local_work;
extern unsigned int total_go, total_ro; extern unsigned int total_go, total_ro;
extern int opt_log_interval; extern int opt_log_interval;
extern pthread_mutex_t control_lock;
#ifdef HAVE_OPENCL #ifdef HAVE_OPENCL
typedef struct { typedef struct {

6
util.c

@ -669,7 +669,9 @@ int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (
{ {
int ret; int ret;
mutex_lock(&control_lock);
ret = pthread_create(&thr->pth, attr, start, arg); ret = pthread_create(&thr->pth, attr, start, arg);
mutex_unlock(&control_lock);
return ret; return ret;
} }
@ -680,11 +682,15 @@ void thr_info_cancel(struct thr_info *thr)
if (thr->q) if (thr->q)
tq_freeze(thr->q); tq_freeze(thr->q);
/* control_lock protects thr->pth */
mutex_lock(&control_lock);
if (thr->pth) { if (thr->pth) {
if (!pthread_cancel(thr->pth)) if (!pthread_cancel(thr->pth))
pthread_join(thr->pth, NULL); pthread_join(thr->pth, NULL);
thr->pth = 0L; thr->pth = 0L;
} }
mutex_unlock(&control_lock);
} }
bool get_dondata(char **url, char **userpass) bool get_dondata(char **url, char **userpass)

Loading…
Cancel
Save