On (08/20/19 11:23), Petr Mladek wrote: > > is no risk of the descriptor unexpectedly being determined as > > valid due to dataring head overflowing/wrapping. > > Please, provide more details about the solved race. Is it because > some reader could have reference to an invalid (reused) descriptor? > Can be these invalid descriptors be member of the list?
As far as I understand, such descriptors can be on the list: prb_reserve() assign_desc() // pick a new never used descr i = atomic_fetch_inc(&rb->desc_next_unused); d = &rb->descs[i] dataring_desc_init(&d->desc); return d buf = dataring_push() // the oldest data is reserved, but not commited ret = get_new_lpos() if (ret) dataring_desc_init() return NULL if (!buf) numlist_push() _datablock_valid() has a "desc->begin_lpos == desc->next_lpos" check. -ss