lfqueue icon indicating copy to clipboard operation
lfqueue copied to clipboard

Question about a particular function.

Open ghost opened this issue 1 year ago • 1 comments

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();
}

ghost avatar Oct 06 '22 19:10 ghost

hi @uvuxz ,

Yes it's TTL, due to memory balancing, we can't free immediately as it will cause memory crash. Batch Removing is a solution i can figure it out.

Taymindis avatar Oct 12 '22 03:10 Taymindis