void rp_kcache_tracker::unreserve(sel_chan r) { unsigned sel = kc_sel(r); for (unsigned i = 0; i < sel_count; ++i) if (rp[i] == sel) { if (--uc[i] == 0) rp[i] = 0; return; } assert(0); return; }
bool rp_kcache_tracker::try_reserve(sel_chan r) { unsigned sel = kc_sel(r); for (unsigned i = 0; i < sel_count; ++i) { if (rp[i] == 0) { rp[i] = sel; ++uc[i]; return true; } if (rp[i] == sel) { ++uc[i]; return true; } } return false; }