mirror of
https://github.com/GOSTSec/sgminer
synced 2025-03-10 12:41:02 +00:00
Provide a function to discard queued work based on age. (NOTE: may be unused)
This commit is contained in:
parent
ebeb710375
commit
05d69bf75c
24
cgminer.c
24
cgminer.c
@ -6251,6 +6251,30 @@ void __work_completed(struct cgpu_info *cgpu, struct work *work)
|
|||||||
cgpu->queued_count--;
|
cgpu->queued_count--;
|
||||||
HASH_DEL(cgpu->queued_work, work);
|
HASH_DEL(cgpu->queued_work, work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This iterates over a queued hashlist finding work started more than secs
|
||||||
|
* seconds ago and discards the work as completed. The driver must set the
|
||||||
|
* work->tv_work_start value appropriately. Returns the number of items aged. */
|
||||||
|
int age_queued_work(struct cgpu_info *cgpu, double secs)
|
||||||
|
{
|
||||||
|
struct work *work, *tmp;
|
||||||
|
struct timeval tv_now;
|
||||||
|
int aged = 0;
|
||||||
|
|
||||||
|
cgtime(&tv_now);
|
||||||
|
|
||||||
|
wr_lock(&cgpu->qlock);
|
||||||
|
HASH_ITER(hh, cgpu->queued_work, work, tmp) {
|
||||||
|
if (tdiff(&tv_now, &work->tv_work_start) > secs) {
|
||||||
|
__work_completed(cgpu, work);
|
||||||
|
aged++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wr_unlock(&cgpu->qlock);
|
||||||
|
|
||||||
|
return aged;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function should be used by queued device drivers when they're sure
|
/* This function should be used by queued device drivers when they're sure
|
||||||
* the work struct is no longer in use. */
|
* the work struct is no longer in use. */
|
||||||
void work_completed(struct cgpu_info *cgpu, struct work *work)
|
void work_completed(struct cgpu_info *cgpu, struct work *work)
|
||||||
|
1
miner.h
1
miner.h
@ -1368,6 +1368,7 @@ extern struct work *__find_work_bymidstate(struct work *que, char *midstate, siz
|
|||||||
extern struct work *find_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
extern struct work *find_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||||
extern struct work *clone_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
extern struct work *clone_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||||
extern void __work_completed(struct cgpu_info *cgpu, struct work *work);
|
extern void __work_completed(struct cgpu_info *cgpu, struct work *work);
|
||||||
|
extern int age_queued_work(struct cgpu_info *cgpu, double secs);
|
||||||
extern void work_completed(struct cgpu_info *cgpu, struct work *work);
|
extern void work_completed(struct cgpu_info *cgpu, struct work *work);
|
||||||
extern struct work *take_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
extern struct work *take_queued_work_bymidstate(struct cgpu_info *cgpu, char *midstate, size_t midstatelen, char *data, int offset, size_t datalen);
|
||||||
extern void hash_driver_work(struct thr_info *mythr);
|
extern void hash_driver_work(struct thr_info *mythr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user