Do not start processSlotTx before it is ready to run.
Implement run-to-completion for processSlotTX. This is achieved by using a new dynamic_barrier_t which allows to specify callback after the first join has been made.
This commit is contained in:
@@ -31,6 +31,16 @@ void dynamic_barrier_init(dynamic_barrier_t* barrier)
|
||||
barrier->completed_jobs = 0;
|
||||
}
|
||||
|
||||
void dynamic_barrier_reset(dynamic_barrier_t* barrier)
|
||||
{
|
||||
barrier->callback = NULL;
|
||||
if (barrier->callback_arg != NULL) {
|
||||
free(barrier->callback_arg);
|
||||
}
|
||||
barrier->callback_arg = NULL;
|
||||
barrier->completed_jobs = 0;
|
||||
}
|
||||
|
||||
void dynamic_barrier_join(dynamic_barrier_t* barrier)
|
||||
{
|
||||
int ret = pthread_mutex_lock(&barrier->barrier_lock);
|
||||
|
||||
@@ -39,6 +39,10 @@ typedef struct dynamic_barrier_t {
|
||||
/// @param barrier
|
||||
void dynamic_barrier_init(dynamic_barrier_t* barrier);
|
||||
|
||||
/// @brief Reset the barrier
|
||||
/// @param barrier
|
||||
void dynamic_barrier_reset(dynamic_barrier_t* barrier);
|
||||
|
||||
/// @brief Perform join on the barrier. May run callback if it is already set
|
||||
/// @param barrier
|
||||
void dynamic_barrier_join(dynamic_barrier_t* barrier);
|
||||
|
||||
Reference in New Issue
Block a user