|
|
@ -2939,8 +2939,13 @@ static void roll_work(struct work *work) |
|
|
|
* prevent a copied work struct from freeing ram belonging to another struct */ |
|
|
|
* prevent a copied work struct from freeing ram belonging to another struct */ |
|
|
|
void __copy_work(struct work *work, struct work *base_work) |
|
|
|
void __copy_work(struct work *work, struct work *base_work) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
int id = work->id; |
|
|
|
|
|
|
|
|
|
|
|
clean_work(work); |
|
|
|
clean_work(work); |
|
|
|
memcpy(work, base_work, sizeof(struct work)); |
|
|
|
memcpy(work, base_work, sizeof(struct work)); |
|
|
|
|
|
|
|
/* Keep the unique new id assigned during make_work to prevent copied
|
|
|
|
|
|
|
|
* work from having the same id. */ |
|
|
|
|
|
|
|
work->id = id; |
|
|
|
if (base_work->job_id) |
|
|
|
if (base_work->job_id) |
|
|
|
work->job_id = strdup(base_work->job_id); |
|
|
|
work->job_id = strdup(base_work->job_id); |
|
|
|
if (base_work->nonce2) |
|
|
|
if (base_work->nonce2) |
|
|
@ -2957,7 +2962,7 @@ struct work *copy_work(struct work *base_work) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct work *work = make_work(); |
|
|
|
struct work *work = make_work(); |
|
|
|
|
|
|
|
|
|
|
|
__copy_work(work, base_work); |
|
|
|
__copy_work(work, base_work); |
|
|
|
|
|
|
|
|
|
|
|
return work; |
|
|
|
return work; |
|
|
|
} |
|
|
|
} |
|
|
|