ck_epoch: Epoch goal must be ordered with respect prior operations.

ck_pring
Samy Al Bahra 9 years ago
parent 03bd7a4158
commit e60c05bb65

@ -391,21 +391,20 @@ ck_epoch_synchronize(struct ck_epoch_record *record)
unsigned int delta, epoch, goal, i; unsigned int delta, epoch, goal, i;
bool active; bool active;
ck_pr_fence_memory();
/* /*
* If UINT_MAX concurrent mutations were to occur then * The observation of the global epoch must be ordered with respect to
* it is possible to encounter an ABA-issue. If this is a concern, * all prior operations. The re-ordering of loads is permitted given
* consider tuning write-side concurrency. * monoticity of global epoch counter.
*
* If UINT_MAX concurrent mutations were to occur then it is possible
* to encounter an ABA-issue. If this is a concern, consider tuning
* write-side concurrency.
*/ */
delta = epoch = ck_pr_load_uint(&global->epoch); delta = epoch = ck_pr_load_uint(&global->epoch);
goal = epoch + CK_EPOCH_GRACE; goal = epoch + CK_EPOCH_GRACE;
/*
* Provide strong ordering irrespective of reader status. The
* observations of the counters must be ordered with respect to
* prior updates and current active readers.
*/
ck_pr_fence_memory();
for (i = 0, cr = NULL; i < CK_EPOCH_GRACE - 1; cr = NULL, i++) { for (i = 0, cr = NULL; i < CK_EPOCH_GRACE - 1; cr = NULL, i++) {
bool r; bool r;

Loading…
Cancel
Save