rktio: correct problem with change to growable poll set
This commit is contained in:
parent
c4f44eaedd
commit
b3b240ebc7
|
@ -21,7 +21,7 @@ libdir = @libdir@
|
||||||
|
|
||||||
RACKET = racket
|
RACKET = racket
|
||||||
|
|
||||||
RKTIO_HEADERS = $(srcdir)/rktio.h $(srcdir)/rktio_private.h rktio_config.h
|
RKTIO_HEADERS = $(srcdir)/rktio.h $(srcdir)/rktio_private.h $(srcdir)/rktio_platform.h rktio_config.h
|
||||||
|
|
||||||
OBJS = rktio_fs.@LTO@ \
|
OBJS = rktio_fs.@LTO@ \
|
||||||
rktio_fd.@LTO@ \
|
rktio_fd.@LTO@ \
|
||||||
|
|
|
@ -404,7 +404,7 @@ static void maybe_grow(rktio_poll_set_t *fd, int n)
|
||||||
memcpy((char *)p2 + 2*(new_size + extra), (char *)p + 2*(old_size + extra), old_size);
|
memcpy((char *)p2 + 2*(new_size + extra), (char *)p + 2*(old_size + extra), old_size);
|
||||||
|
|
||||||
/* copy over size and nosleep */
|
/* copy over size and nosleep */
|
||||||
memcpy((char *)p2 + new_size, (char *)p + old_size, sizeof(intptr_t) + sizeof(int));
|
memcpy((char *)p2 + new_size, (char *)p + old_size, extra);
|
||||||
|
|
||||||
((void **)fd)[GROWABLE_CONTENT_INDEX] = p2;
|
((void **)fd)[GROWABLE_CONTENT_INDEX] = p2;
|
||||||
((intptr_t *)fd)[GROWABLE_SIZE_INDEX] = new_size;
|
((intptr_t *)fd)[GROWABLE_SIZE_INDEX] = new_size;
|
||||||
|
@ -971,14 +971,19 @@ void rktio_merge_fd_sets(rktio_poll_set_t *fds, rktio_poll_set_t *src_fds)
|
||||||
src_fds_j = rktio_get_fdset(src_fds, j);
|
src_fds_j = rktio_get_fdset(src_fds, j);
|
||||||
# ifdef RKTIO_GROWABLE_FDSET
|
# ifdef RKTIO_GROWABLE_FDSET
|
||||||
src_fds_j = growable_resolve(src_fds_j, &s_dynamic_fd_size);
|
src_fds_j = growable_resolve(src_fds_j, &s_dynamic_fd_size);
|
||||||
maybe_grow(fds, FDSET_LIMIT(sp, s_dynamic_fd_size));
|
|
||||||
# endif
|
# endif
|
||||||
sp = (unsigned char *)src_fds_j;
|
sp = (unsigned char *)src_fds_j;
|
||||||
fds_j = rktio_get_fdset(fds_j, j);
|
|
||||||
|
# ifdef RKTIO_GROWABLE_FDSET
|
||||||
|
maybe_grow(fds, FDSET_LIMIT(sp, s_dynamic_fd_size));
|
||||||
|
# endif
|
||||||
|
|
||||||
|
fds_j = rktio_get_fdset(fds, j);
|
||||||
# ifdef RKTIO_GROWABLE_FDSET
|
# ifdef RKTIO_GROWABLE_FDSET
|
||||||
fds_j = growable_resolve(fds_j, &dynamic_fd_size);
|
fds_j = growable_resolve(fds_j, &dynamic_fd_size);
|
||||||
# endif
|
# endif
|
||||||
p = (unsigned char *)src_fds_j;
|
p = (unsigned char *)fds_j;
|
||||||
|
|
||||||
# ifdef STORED_ACTUAL_FDSET_LIMIT
|
# ifdef STORED_ACTUAL_FDSET_LIMIT
|
||||||
i = FDSET_LIMIT(p, dynamic_fd_size);
|
i = FDSET_LIMIT(p, dynamic_fd_size);
|
||||||
if (FDSET_LIMIT(sp, s_dynamic_fd_size) > i) {
|
if (FDSET_LIMIT(sp, s_dynamic_fd_size) > i) {
|
||||||
|
@ -992,10 +997,12 @@ void rktio_merge_fd_sets(rktio_poll_set_t *fds, rktio_poll_set_t *src_fds)
|
||||||
# else
|
# else
|
||||||
i = sizeof(fd_set);
|
i = sizeof(fd_set);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
for (; i--; p++, sp++) {
|
for (; i--; p++, sp++) {
|
||||||
*p |= *sp;
|
*p |= *sp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fdset_has_nosleep(src_fds))
|
if (fdset_has_nosleep(src_fds))
|
||||||
rktio_poll_set_add_nosleep(NULL, fds);
|
rktio_poll_set_add_nosleep(NULL, fds);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user