Skip to content

Commit 7ee48e9

Browse files
committed
Found the bug... or A bug...
1 parent 845477e commit 7ee48e9

File tree

1 file changed

+35
-63
lines changed

1 file changed

+35
-63
lines changed

ext/iodine/fio-stl.h

Lines changed: 35 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -13626,6 +13626,24 @@ Copyright and License: see header file (000 copyright.h) or top of file
1362613626
#endif
1362713627

1362813628
#include <signal.h>
13629+
/* ****************************************************************************
13630+
Portable signal aliases (abstract OS differences)
13631+
***************************************************************************** */
13632+
13633+
#if FIO_OS_POSIX
13634+
#define FIO_SIGNAL_USER1 SIGUSR1
13635+
#define FIO_SIGNAL_USER2 SIGUSR2
13636+
#define FIO_SIGNAL_USER_UNREGISTERED SIGUSR2
13637+
#elif FIO_OS_WIN
13638+
/* Windows has no SIGUSR1/SIGUSR2; map to safe, distinct signals. */
13639+
#define FIO_SIGNAL_USER1 SIGBREAK
13640+
#define FIO_SIGNAL_USER2 SIGABRT
13641+
/*
13642+
* Use SIGBREAK for unregistered-signal tests to avoid clobbering SIGINT/SIGTERM
13643+
* handlers that a test harness might rely on.
13644+
*/
13645+
#define FIO_SIGNAL_USER_UNREGISTERED SIGBREAK
13646+
#endif
1362913647
/* *****************************************************************************
1363013648
Signal Monitoring API
1363113649
***************************************************************************** */
@@ -13767,7 +13785,6 @@ SFUNC int fio_signal_forget(int sig) {
1376713785
}
1376813786
return 0;
1376913787
}
13770-
sigaction(sig, &act, NULL);
1377113788
return -1;
1377213789
}
1377313790

@@ -13869,7 +13886,6 @@ SFUNC int fio_signal_forget(int sig) {
1386913886
fio___signal_watchers[i].old = SIG_DFL;
1387013887
return 0;
1387113888
}
13872-
signal(sig, SIG_DFL);
1387313889
return -1;
1387413890
sig_error:
1387513891
fio___signal_watchers[i].old = SIG_DFL;
@@ -13902,60 +13918,6 @@ SFUNC int fio_signal_review(void) {
1390213918
return c;
1390313919
}
1390413920

13905-
/* *****************************************************************************
13906-
Signal Monitoring Testing?
13907-
***************************************************************************** */
13908-
#ifdef FIO_TEST_ALL
13909-
FIO_SFUNC void FIO_NAME_TEST(stl, signal)(void) {
13910-
13911-
#define FIO___SIGNAL_MEMBER(a) \
13912-
{ (int)a, #a }
13913-
struct {
13914-
int sig;
13915-
const char *name;
13916-
} t[] = {
13917-
FIO___SIGNAL_MEMBER(SIGINT),
13918-
FIO___SIGNAL_MEMBER(SIGILL),
13919-
FIO___SIGNAL_MEMBER(SIGABRT),
13920-
FIO___SIGNAL_MEMBER(SIGSEGV),
13921-
FIO___SIGNAL_MEMBER(SIGTERM),
13922-
#if FIO_OS_POSIX
13923-
FIO___SIGNAL_MEMBER(SIGQUIT),
13924-
FIO___SIGNAL_MEMBER(SIGHUP),
13925-
FIO___SIGNAL_MEMBER(SIGTRAP),
13926-
FIO___SIGNAL_MEMBER(SIGBUS),
13927-
FIO___SIGNAL_MEMBER(SIGFPE),
13928-
FIO___SIGNAL_MEMBER(SIGUSR1),
13929-
FIO___SIGNAL_MEMBER(SIGUSR2),
13930-
FIO___SIGNAL_MEMBER(SIGPIPE),
13931-
FIO___SIGNAL_MEMBER(SIGALRM),
13932-
FIO___SIGNAL_MEMBER(SIGCHLD),
13933-
FIO___SIGNAL_MEMBER(SIGCONT),
13934-
#endif
13935-
};
13936-
#undef FIO___SIGNAL_MEMBER
13937-
size_t e = 0;
13938-
fprintf(stderr, "* testing signal monitoring (setup / cleanup only).\n");
13939-
for (size_t i = 0; i < sizeof(t) / sizeof(t[0]); ++i) {
13940-
if (fio_signal_monitor(t[i].sig, NULL, NULL, 1)) {
13941-
FIO_LOG_ERROR("couldn't set signal monitoring for %s (%d)",
13942-
t[i].name,
13943-
t[i].sig);
13944-
e = 1;
13945-
}
13946-
}
13947-
for (size_t i = 0; i < sizeof(t) / sizeof(t[0]); ++i) {
13948-
if (fio_signal_forget(t[i].sig)) {
13949-
FIO_LOG_ERROR("couldn't stop signal monitoring for %s (%d)",
13950-
t[i].name,
13951-
t[i].sig);
13952-
e = 1;
13953-
}
13954-
}
13955-
FIO_ASSERT(!e, "signal monitoring error");
13956-
}
13957-
13958-
#endif /* FIO_TEST_ALL */
1395913921
/* *****************************************************************************
1396013922
Module Cleanup
1396113923
***************************************************************************** */
@@ -19939,12 +19901,16 @@ SFUNC short fio_sock_wait_io(fio_socket_i fd, short events, int timeout) {
1993919901
/** Attempts to maximize the allowed open file limits. returns known limit */
1994019902
SFUNC size_t fio_sock_maximize_limits(size_t max_limit) {
1994119903
ssize_t capa = 0;
19904+
#if FIO_OS_POSIX
1994219905
if (!max_limit)
1994319906
max_limit = FIO_SOCK_DEFAULT_MAXIMIZE_LIMIT;
19944-
#if FIO_OS_POSIX
1994519907

1994619908
#ifdef _SC_OPEN_MAX
19947-
capa = sysconf(_SC_OPEN_MAX);
19909+
{
19910+
const long sys_max = sysconf(_SC_OPEN_MAX);
19911+
if (sys_max >= 0)
19912+
capa = (ssize_t)sys_max;
19913+
}
1994819914
#elif defined(FOPEN_MAX)
1994919915
capa = FOPEN_MAX;
1995019916
#endif
@@ -19976,11 +19942,13 @@ SFUNC size_t fio_sock_maximize_limits(size_t max_limit) {
1997619942
getrlimit(RLIMIT_NOFILE, &rlim);
1997719943
capa = rlim.rlim_cur;
1997819944
#elif FIO_OS_WIN
19979-
capa = 1ULL << 10;
19980-
while (_setmaxstdio(capa) > 0)
19981-
capa <<= 1;
19982-
capa >>= 1;
19983-
FIO_LOG_DEBUG("new open file limit: %zd", (ssize_t)capa);
19945+
if (!max_limit)
19946+
max_limit = FIO_SOCK_DEFAULT_MAXIMIZE_LIMIT;
19947+
capa = (ssize_t)max_limit;
19948+
FIO_LOG_DEBUG2(
19949+
"Windows has no RLIMIT_NOFILE-equivalent for sockets; using advisory "
19950+
"per-process cap %zu",
19951+
max_limit);
1998419952
#else
1998519953
FIO_LOG_ERROR("No OS detected, couldn't maximize open file limit.");
1998619954
#endif
@@ -97116,6 +97084,8 @@ SFUNC void fio_io_start(int workers) {
9711697084
if (workers) {
9711797085
FIO___IO.to_spawn = workers;
9711897086
fio___io_spawn_workers_task(NULL, NULL);
97087+
FIO_LOG_DEBUG2("(%d) starting facil.io IO reactor in single process mode.",
97088+
fio_io_root_pid());
9711997089
} else {
9712097090
FIO_LOG_DEBUG2("(%d) starting facil.io IO reactor in single process mode.",
9712197091
fio_io_root_pid());
@@ -98984,6 +98954,8 @@ FIO_SFUNC void fio___ipc_listen(void *ignr_) {
9898498954
FIO___IPC.ipc_url);
9898598955
}
9898698956

98957+
FIO_LOG_DDEBUG2("(%d) Opening IPC listening socket @ %s", FIO___IPC.ipc_url);
98958+
9898798959
fio_socket_i fd =
9898898960
fio_sock_open2(FIO___IPC.ipc_url,
9898998961
FIO_SOCK_SERVER | FIO_SOCK_TCP | FIO_SOCK_NONBLOCK);

0 commit comments

Comments
 (0)