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?
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@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@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list