Skip to content

Commit 15e0a49

Browse files
committed
Revert "Copy va_list when awaiting multiple fds only if needed"
This change was causing a segmentation fault. I'll investigate some other day; for now, revert this. This reverts commit d8ed81e.
1 parent b3730cc commit 15e0a49

File tree

1 file changed

+9
-14
lines changed

1 file changed

+9
-14
lines changed

src/lib/lwan-thread.c

+9-14
Original file line numberDiff line numberDiff line change
@@ -705,15 +705,16 @@ static int prepare_await(const struct lwan *l,
705705
return -errno;
706706
}
707707

708-
#define FOR_EACH_FD(name_) \
709-
for (int name_ = va_arg(ap, int); name_ >= 0; name_ = va_arg(ap, int))
710-
711-
static void clear_awaitv_flags(struct lwan_connection *conns, va_list ap)
708+
static void clear_awaitv_flags(struct lwan_connection *conns, va_list ap_orig)
712709
{
713-
FOR_EACH_FD(fd) {
710+
va_list ap;
711+
712+
va_copy(ap, ap_orig);
713+
for (int fd = va_arg(ap, int); fd >= 0; fd = va_arg(ap, int)) {
714714
conns[fd].flags &= ~CONN_ASYNC_AWAITV;
715715
LWAN_NO_DISCARD(va_arg(ap, enum lwan_connection_coro_yield));
716716
}
717+
va_end(ap);
717718
}
718719

719720
struct awaitv_state {
@@ -733,14 +734,10 @@ static int prepare_awaitv(struct lwan_request *r,
733734
.request_conn_yield = CONN_CORO_YIELD,
734735
};
735736

736-
{
737-
va_list copy_to_clear;
738-
va_copy(ap, copy_to_clear);
739-
clear_awaitv_flags(l->conns, copy_to_clear);
740-
va_end(copy_to_clear);
741-
}
737+
clear_awaitv_flags(l->conns, ap);
742738

743-
FOR_EACH_FD(await_fd) {
739+
for (int await_fd = va_arg(ap, int); await_fd >= 0;
740+
await_fd = va_arg(ap, int)) {
744741
struct lwan_connection *conn = &l->conns[await_fd];
745742
enum lwan_connection_coro_yield events =
746743
va_arg(ap, enum lwan_connection_coro_yield);
@@ -774,8 +771,6 @@ static int prepare_awaitv(struct lwan_request *r,
774771
return 0;
775772
}
776773

777-
#undef FOR_EACH_FD
778-
779774
int lwan_request_awaitv_any(struct lwan_request *r, ...)
780775
{
781776
struct lwan *l = r->conn->thread->lwan;

0 commit comments

Comments
 (0)