mirror of
https://github.com/skot/ESP-Miner.git
synced 2025-04-11 13:30:51 +02:00
queue: clear queue when stratum says to abandon old work
This commit is contained in:
parent
f80805f53a
commit
40cb7fac61
@ -146,6 +146,9 @@ static void admin_task(void *pvParameters)
|
||||
|
||||
stratum_method method = parse_stratum_method(line);
|
||||
if (method == MINING_NOTIFY) {
|
||||
if (should_abandon_work(line)) {
|
||||
queue_clear(&g_queue);
|
||||
}
|
||||
queue_enqueue(&g_queue, line);
|
||||
} else {
|
||||
free(line);
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "work_queue.h"
|
||||
|
||||
void queue_init(work_queue *queue) {
|
||||
void queue_init(work_queue * queue) {
|
||||
queue->head = 0;
|
||||
queue->tail = 0;
|
||||
queue->count = 0;
|
||||
@ -9,7 +9,7 @@ void queue_init(work_queue *queue) {
|
||||
pthread_cond_init(&queue->not_full, NULL);
|
||||
}
|
||||
|
||||
void queue_enqueue(work_queue *queue, char * new_work) {
|
||||
void queue_enqueue(work_queue * queue, char * new_work) {
|
||||
pthread_mutex_lock(&queue->lock);
|
||||
|
||||
while (queue->count == QUEUE_SIZE) {
|
||||
@ -24,7 +24,7 @@ void queue_enqueue(work_queue *queue, char * new_work) {
|
||||
pthread_mutex_unlock(&queue->lock);
|
||||
}
|
||||
|
||||
char * queue_dequeue(work_queue *queue, int *termination_flag) {
|
||||
char * queue_dequeue(work_queue * queue, int *termination_flag) {
|
||||
pthread_mutex_lock(&queue->lock);
|
||||
|
||||
while (queue->count == 0) {
|
||||
@ -43,4 +43,20 @@ char * queue_dequeue(work_queue *queue, int *termination_flag) {
|
||||
pthread_mutex_unlock(&queue->lock);
|
||||
|
||||
return next_work;
|
||||
}
|
||||
}
|
||||
|
||||
void queue_clear(work_queue * queue)
|
||||
{
|
||||
pthread_mutex_lock(&queue->lock);
|
||||
|
||||
while (queue->count > 0)
|
||||
{
|
||||
char * next_work = queue->buffer[queue->head];
|
||||
free(next_work);
|
||||
queue->head = (queue->head + 1) % QUEUE_SIZE;
|
||||
queue->count--;
|
||||
}
|
||||
|
||||
pthread_cond_signal(&queue->not_full);
|
||||
pthread_mutex_unlock(&queue->lock);
|
||||
}
|
||||
|
@ -19,5 +19,6 @@ typedef struct {
|
||||
void queue_init(work_queue *queue);
|
||||
void queue_enqueue(work_queue *queue, char * new_work);
|
||||
char * queue_dequeue(work_queue *queue, int *termination_flag);
|
||||
void queue_clear(work_queue *queue);
|
||||
|
||||
#endif // WORK_QUEUE_H
|
Loading…
x
Reference in New Issue
Block a user