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@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@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