Skip to content

Commit 33dee5d

Browse files
authored
synserver accept assertion to log event details before aborting (#12903)
* Replace bare TSAssert in synserver_vc_accept and synserver_vc_refuse with ink_abort that logs the unexpected event number and, if the data looks like a negated errno, the strerror string. Gives CI output useful for debugging the accept() failure seen on Rocky build #8376. * Validate data in intptr_t space (negative and >= -4095) before treating it as a negated errno to avoid truncating a pointer to int.
1 parent 3d73f1c commit 33dee5d

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

src/api/InkAPITest.cc

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,16 @@ synserver_delete(SocketServer *s)
892892
static int
893893
synserver_vc_refuse(TSCont contp, TSEvent event, void *data)
894894
{
895-
TSAssert((event == TS_EVENT_NET_ACCEPT) || (event == TS_EVENT_NET_ACCEPT_FAILED));
895+
if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) {
896+
// net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095
897+
intptr_t data_val = reinterpret_cast<intptr_t>(data);
898+
if (data_val < 0 && data_val >= -4095) {
899+
int err = static_cast<int>(-data_val);
900+
ink_abort("synserver_vc_refuse: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err);
901+
} else {
902+
ink_abort("synserver_vc_refuse: unexpected event %d, data: %p", event, data);
903+
}
904+
}
896905

897906
SocketServer *s = static_cast<SocketServer *>(TSContDataGet(contp));
898907
TSAssert(s->magic == MAGIC_ALIVE);
@@ -913,7 +922,16 @@ synserver_vc_refuse(TSCont contp, TSEvent event, void *data)
913922
static int
914923
synserver_vc_accept(TSCont contp, TSEvent event, void *data)
915924
{
916-
TSAssert((event == TS_EVENT_NET_ACCEPT) || (event == TS_EVENT_NET_ACCEPT_FAILED));
925+
if (event != TS_EVENT_NET_ACCEPT && event != TS_EVENT_NET_ACCEPT_FAILED) {
926+
// net_accept() passes negated errno as data on EVENT_ERROR; Linux MAX_ERRNO is 4095
927+
intptr_t data_val = reinterpret_cast<intptr_t>(data);
928+
if (data_val < 0 && data_val >= -4095) {
929+
int err = static_cast<int>(-data_val);
930+
ink_abort("synserver_vc_accept: unexpected event %d, accept errno: %s (%d)", event, strerror(err), err);
931+
} else {
932+
ink_abort("synserver_vc_accept: unexpected event %d, data: %p", event, data);
933+
}
934+
}
917935

918936
SocketServer *s = static_cast<SocketServer *>(TSContDataGet(contp));
919937
TSAssert(s->magic == MAGIC_ALIVE);

0 commit comments

Comments
 (0)