[gambit-list] Gambit crash with over 1024 file descriptors

Mikael mikael.rcv at gmail.com
Mon Mar 25 06:45:56 EDT 2013


A libevent patch for Gambit was made couple of years ago, can dig it out
for your reference and you could make a libev or libevent patch for current
Gambit?

Possibly Gambit could use it if it's detected as installed?

(select() on Windows is a mess, duno if either of libev or libevent works
around that better these days.)

>1024 is not an everyday usecase though I'm with you that it absolutely
ought to be supported natively or via a patch.

Brgds

2013/3/25 Dimitris Vyzovitis <vyzo at hackzen.org>

> I guess this shouldn't be too big a surprise given this definition:
> /usr/include/bits/typesizes.h:#define   __FD_SETSIZE            1024
>
> /usr/include/sys/select.h:
>  typedef struct
>   {
> #ifdef __USE_XOPEN
>     __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
> # define __FDS_BITS(set) ((set)->fds_bits)
> #else
>     __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
> # define __FDS_BITS(set) ((set)->__fds_bits)
> #endif
>   } fd_set;
>
> #define __NFDBITS       (8 * (int) sizeof (__fd_mask))
>
> So great. Gambit can't do more than 1024 file descriptors, unless the
> scheduler is fixed to use poll instead of select.
>
> -- vyzo
>
> On Sun, Mar 24, 2013 at 10:45 PM, Dimitris Vyzovitis <vyzo at hackzen.org>
> wrote:
> > I have a program uses large numbers of file descriptors (over 1024),
> > and it crashes miserably in __fortify_fail. Turning off
> > FORTIFY_SOURCE/stack-protector results in a plain old segfault.
> >
> > Reproducing with the attached program (crash-it.scm):
> > Platform is GNU/Linux x86-64, gcc is 4.6.3.
> > You need to set your ulimit over 1024 to trigger the crash (otherwise
> > you'll just get "Too many open files" and rain of "integer expected"
> > from the looping threads)
> >
> > $ ulimit -n
> > 4096
> > $ gsi crash-it.scm -e "(go 1500)"
> > *** buffer overflow detected ***: gsi terminated
> > ======= Backtrace: =========
> > /lib64/libc.so.6(__fortify_fail+0x37)[0x7fb775187dd7]
> > /lib64/libc.so.6(+0xfdbe0)[0x7fb775185be0]
> > /lib64/libc.so.6(+0xffd8e)[0x7fb775187d8e]
> >
> /usr/local/gambit/current/lib/libgambc.so(___device_select_add_fd+0x55)[0x7fb775d625c5]
> > /usr/local/gambit/current/lib/libgambc.so(+0x227a91)[0x7fb775d62a91]
> >
> /usr/local/gambit/current/lib/libgambc.so(___device_select+0x104)[0x7fb775d62324]
> >
> /usr/local/gambit/current/lib/libgambc.so(___os_condvar_select+0x141)[0x7fb775d64d61]
> > /usr/local/gambit/current/lib/libgambc.so(+0x2310a1)[0x7fb775d6c0a1]
> > /usr/local/gambit/current/lib/libgambc.so(___call+0xfa)[0x7fb775d4d2ba]
> > /usr/local/gambit/current/lib/libgambc.so(___setup+0xfc0)[0x7fb775d4f760]
> > /usr/local/gambit/current/lib/libgambc.so(___main+0x2a7)[0x7fb775d4bf57]
> >
> /usr/local/gambit/current/lib/libgambc.so(___main_char+0xb0)[0x7fb775d59200]
> > /lib64/libc.so.6(__libc_start_main+0xed)[0x7fb7750ac60d]
> > gsi[0x403199]
> >
> > Build config:
> > ./configure
> >  --prefix=/usr/local/gambit
> >  --enable-single-host
> >  --enable-c-opt
> >  --enable-gcc-opts
> >  --enable-multiple-versions
> >  --enable-shared
> >
> > To build without fortifications:
> >  ./configure CFLAGS="-U_FORTIFY_SOURCE -fno-stack-protector" ...
> > And you'll get a segfault.
> >
> > -- vyzo
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://webmail.iro.umontreal.ca/pipermail/gambit-list/attachments/20130325/1db33442/attachment.html 


More information about the Gambit-list mailing list