On Tue, Aug 29, 2023 at 05:13:08PM +0200, Michal Privoznik wrote: > The point of calling sysconf(_SC_OPEN_MAX) is to allocate big > enough bitmap so that subsequent call to > virCommandMassCloseGetFDsDir() can just set the bit instead of > expanding memory (this code runs in a forked off child and thus > using async-signal-unsafe functions like malloc() is a bit > tricky). > > But on some systems the limit for opened FDs is virtually > non-existent (typically macOS Ventura started reporting EINVAL). > > But with both glibc and musl using malloc() after fork() is safe. > And with sufficiently new glib too, as it's using malloc() with > newer releases instead of their own allocator. > > Therefore, pick a sufficiently large value (glibc falls back to > 256, [1], so 1024 should be good enough) to fall back to and make > the error non-fatal. That's not suitable for macOS. THey have a constant OPEN_MAX we should be using that is way bigger than 1024. > > 1: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getdtsz.c;h=4c5a6208067d2f9eaaac6dba652702fb4af9b7e3;hb=HEAD > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > src/util/vircommand.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/src/util/vircommand.c b/src/util/vircommand.c > index 822b9487f9..8c06e19723 100644 > --- a/src/util/vircommand.c > +++ b/src/util/vircommand.c > @@ -500,7 +500,7 @@ virCommandMassCloseGetFDsDir(virBitmap *fds, > return -1; > } > > - ignore_value(virBitmapSetBit(fds, fd)); > + virBitmapSetBitExpand(fds, fd); > } > > if (rc < 0) > @@ -544,10 +544,8 @@ virCommandMassCloseFrom(virCommand *cmd, > * Therefore we can safely allocate memory here (and transitively call > * opendir/readdir) without a deadlock. */ > > - if (openmax < 0) { > - virReportSystemError(errno, "%s", _("sysconf(_SC_OPEN_MAX) failed")); > - return -1; > - } > + if (openmax <= 0) > + openmax = 1024; > > fds = virBitmapNew(openmax); > > -- > 2.41.0 > With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|