On Tue, Feb 21, 2017 at 03:25:30PM +0100, Matthias Gatto wrote: > fdset_add increment pfdset->num, but fdset_del doesn't decrement pfdset->num, > so if we call fdset_add then fdset_del in a loop witout calling > fdset_shrink, we can easily exceed MAX_FDS with only a few number of fds > used.
I'm assuming you were doing some tests like following? while true; do ovs-vsctl add-port br vhost_n -- ... ovs-vsctl del-port vhost_n done > So my solution is simply to call fdset_shrink in fdset_add > when it exceed MAX_FDS. > > Because fdset_shrink and fdset_add locks pfdset->fd_mutex we can't call > fdset_shrink inside fdset_add because that would cause a dead lock, > so this patch split fdset_shrink in two, fdset_shrink amd fdset_shrink_nolock. Looks good to me. --yliu