-
Notifications
You must be signed in to change notification settings - Fork 23
Open

Description
Hi!
I found your code while looking for a lfq implementation in C.
Upon reading it, I am having some difficulty in understanding the following function.
It appears that you are using some ttl, but it's not clear to me why you are doing it.
Do you mind to share some insight?
Thank you
static void
__lfq_check_free(lfqueue_t *lfqueue) {
lfq_time_t curr_time;
if (__LFQ_BOOL_COMPARE_AND_SWAP(&lfqueue->in_free_mode, 0, 1)) {
lfq_get_curr_time(&curr_time);
lfqueue_cas_node_t *rtfree = lfqueue->root_free, *nextfree;
while ( rtfree && (rtfree != lfqueue->move_free) ) {
nextfree = rtfree->nextfree;
if ( lfq_diff_time(curr_time, rtfree->_deactivate_tm) > 2) {
// printf("%p\n", rtfree);
lfqueue->_free(lfqueue->pl, rtfree);
rtfree = nextfree;
} else {
break;
}
}
lfqueue->root_free = rtfree;
__LFQ_BOOL_COMPARE_AND_SWAP(&lfqueue->in_free_mode, 1, 0);
}
__LFQ_SYNC_MEMORY();
}
Metadata
Metadata
Assignees
Labels
No labels