Browse Source

Clean up timing statistics on thread shutdown.

master
samr7 13 years ago
parent
commit
217351c30b
  1. 1
      oclengine.c
  2. 31
      pattern.c
  3. 1
      pattern.h
  4. 1
      vanitygen.c

1
oclengine.c

@ -2189,6 +2189,7 @@ l_rekey:
vg_ocl_free_args(vocp); vg_ocl_free_args(vocp);
vocp->voc_halt = 0; vocp->voc_halt = 0;
vocp->voc_ocl_slot = -1; vocp->voc_ocl_slot = -1;
vg_context_thread_exit(vcp);
return NULL; return NULL;
} }

31
pattern.c

@ -138,11 +138,11 @@ typedef struct _timing_info_s {
int ti_hist_last; int ti_hist_last;
} timing_info_t; } timing_info_t;
static pthread_mutex_t timing_mutex = PTHREAD_MUTEX_INITIALIZER;
int int
vg_output_timing(vg_context_t *vcp, int cycle, struct timeval *last) vg_output_timing(vg_context_t *vcp, int cycle, struct timeval *last)
{ {
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_t me; pthread_t me;
struct timeval tvnow, tv; struct timeval tvnow, tv;
timing_info_t *tip, *mytip; timing_info_t *tip, *mytip;
@ -158,7 +158,7 @@ vg_output_timing(vg_context_t *vcp, int cycle, struct timeval *last)
mytime = 1; mytime = 1;
rate = 0; rate = 0;
pthread_mutex_lock(&mutex); pthread_mutex_lock(&timing_mutex);
me = pthread_self(); me = pthread_self();
for (tip = vcp->vc_timing_head, mytip = NULL; for (tip = vcp->vc_timing_head, mytip = NULL;
tip != NULL; tip = tip->ti_next) { tip != NULL; tip = tip->ti_next) {
@ -207,17 +207,38 @@ vg_output_timing(vg_context_t *vcp, int cycle, struct timeval *last)
vcp->vc_timing_sincelast += cycle; vcp->vc_timing_sincelast += cycle;
if (mytip != vcp->vc_timing_head) { if (mytip != vcp->vc_timing_head) {
pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&timing_mutex);
return myrate; return myrate;
} }
total = vcp->vc_timing_total; total = vcp->vc_timing_total;
sincelast = vcp->vc_timing_sincelast; sincelast = vcp->vc_timing_sincelast;
pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&timing_mutex);
vcp->vc_output_timing(vcp, sincelast, rate, total); vcp->vc_output_timing(vcp, sincelast, rate, total);
return myrate; return myrate;
} }
void
vg_context_thread_exit(vg_context_t *vcp)
{
timing_info_t *tip, **ptip;
pthread_t me;
pthread_mutex_lock(&timing_mutex);
me = pthread_self();
for (ptip = &vcp->vc_timing_head, tip = *ptip;
tip != NULL;
ptip = &tip->ti_next, tip = *ptip) {
if (!pthread_equal(tip->ti_thread, me))
continue;
*ptip = tip->ti_next;
free(tip);
break;
}
pthread_mutex_unlock(&timing_mutex);
}
static void static void
vg_timing_info_free(vg_context_t *vcp) vg_timing_info_free(vg_context_t *vcp)
{ {

1
pattern.h

@ -122,6 +122,7 @@ extern int vg_context_add_patterns(vg_context_t *vcp,
const char ** const patterns, int npatterns); const char ** const patterns, int npatterns);
extern void vg_context_clear_all_patterns(vg_context_t *vcp); extern void vg_context_clear_all_patterns(vg_context_t *vcp);
extern int vg_context_hash160_sort(vg_context_t *vcp, void *buf); extern int vg_context_hash160_sort(vg_context_t *vcp, void *buf);
extern void vg_context_thread_exit(vg_context_t *vcp);
extern vg_context_t *vg_prefix_context_new(int addrtype, int privtype, extern vg_context_t *vg_prefix_context_new(int addrtype, int privtype,

1
vanitygen.c

@ -392,6 +392,7 @@ vg_thread_loop(void *arg)
out: out:
vg_thread_context_del(&ctx); vg_thread_context_del(&ctx);
vg_context_thread_exit(vcp);
for (i = 0; i < ptarraysize; i++) for (i = 0; i < ptarraysize; i++)
if (ppnt[i]) if (ppnt[i])

Loading…
Cancel
Save