int newidx, avoididx;
struct server *srv, *avoided;
- HA_RWLOCK_WRLOCK(LBPRM_LOCK, &px->lbprm.lock);
+ HA_RWLOCK_SKLOCK(LBPRM_LOCK, &px->lbprm.lock);
if (px->lbprm.tot_weight == 0) {
avoided = NULL;
goto out;
px->lbprm.map.rr_idx = avoididx;
out:
- HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &px->lbprm.lock);
+ HA_RWLOCK_SKUNLOCK(LBPRM_LOCK, &px->lbprm.lock);
/* return NULL or srvtoavoid if found */
return avoided;
}
{
struct server *srv = NULL;
- HA_RWLOCK_WRLOCK(LBPRM_LOCK, &px->lbprm.lock);
+ HA_RWLOCK_RDLOCK(LBPRM_LOCK, &px->lbprm.lock);
if (px->lbprm.tot_weight)
srv = px->lbprm.map.srv[hash % px->lbprm.tot_weight];
- HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &px->lbprm.lock);
+ HA_RWLOCK_RDUNLOCK(LBPRM_LOCK, &px->lbprm.lock);
return srv;
}