From 80399796c72515fd2aea71814c2b3ed26eb9dc36 Mon Sep 17 00:00:00 2001 From: Spoike Date: Sat, 3 Jul 2021 01:46:46 +0000 Subject: [PATCH] Fix sv_autooffload on linux. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5939 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/common/sys_linux_threads.c | 9 +++++++-- engine/server/sv_send.c | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/engine/common/sys_linux_threads.c b/engine/common/sys_linux_threads.c index 24d6ccadd..81d93f64b 100644 --- a/engine/common/sys_linux_threads.c +++ b/engine/common/sys_linux_threads.c @@ -487,9 +487,9 @@ static int QDECL Sys_StdinRead (struct vfsfile_s *file, void *buffer, int bytest ssize_t r; #if defined(__linux__) && defined(_DEBUG) int fl = fcntl (STDIN_FILENO, F_GETFL, 0); - if (!(fl & FNDELAY)) + if (!(fl & O_NONBLOCK)) { - fcntl(STDIN_FILENO, F_SETFL, fl | FNDELAY); + fcntl(STDIN_FILENO, F_SETFL, fl | O_NONBLOCK); Sys_Printf(CON_WARNING "stdin flags became blocking - gdb bug?\n"); } #endif @@ -512,6 +512,11 @@ qboolean QDECL Sys_StdinOutClose(vfsfile_t *fs) vfsfile_t *Sys_GetStdInOutStream(void) { vfsfile_t *stream = Z_Malloc(sizeof(*stream)); + + //make sure nothing bad is going to happen. + fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0)|O_NONBLOCK); + fcntl(STDOUT_FILENO, F_SETFL, fcntl(STDOUT_FILENO, F_GETFL, 0)|O_NONBLOCK); + stream->WriteBytes = Sys_StdoutWrite; stream->ReadBytes = Sys_StdinRead; stream->Close = Sys_StdinOutClose; diff --git a/engine/server/sv_send.c b/engine/server/sv_send.c index 335ad3c97..1bed6c34b 100644 --- a/engine/server/sv_send.c +++ b/engine/server/sv_send.c @@ -2675,7 +2675,7 @@ SV_SendClientDatagram */ qboolean SV_SendClientDatagram (client_t *client) { - qbyte buf[MAX_OVERALLMSGLEN]; + qbyte buf[MAX_OVERALLMSGLEN-64/*play safe*/]; sizebuf_t msg; size_t clientlimit; unsigned int sentbytes; @@ -2707,6 +2707,8 @@ qboolean SV_SendClientDatagram (client_t *client) else clientlimit = client->netchan.mtu; //try not to overflow } + else if (client->netchan.remote_address.type == NA_LOOPBACK && ISNQCLIENT(client)) + clientlimit = countof(buf); //go wild. demos don't care about reliable/unreliable. else if (client->netchan.mtu) clientlimit = client->netchan.mtu; else if (client->protocol == SCP_NETQUAKE)