(empth_t, empth_sem_t): Define as incomplete types in empthread.h,
complete in pthread.c, to avoid exposing implementation details.
(EMPTH_KILLED): Move from empthread.h to pthread.c.
which are obsolete since at least 1997.
(empth_terminate, empth_wakeup) [__ppc__]: Ancient versions of OS X
lacked pthread_kill(). As a work-around, its use was disabled here
for all versions of OS X. The work-around could lead to hangs.
Remove it and drop support for ancient versions of OS X.
(empth_create) [__linux__]: Linux has supported thread attribute
stacksize for ages. Remove the special case.
(_MIT_POSIX_THREADS): Unused, remove.
units do not react to a mountain.
(stre): Add an empth_yield() per sector to make the server responsive
to other players as this command is CPU intensive.
SO_REUSEADDR socket option as it is not required for WIN32.
In WIN32, there is no waiting time when a port is closed before
it can be reused so SO_REUSEADDR is not required for WIN32.
Leave the option has a undesirable effect of allowing a second
server instance to start without an error and leaving both
instances running. ALPHA and LINUX do support SO_REUSEADDR.
after every command, other players gets a chance to execute a command.
This prevents denial of service attack that monopolizing the active server
thread by continuing feeding data to the server from a client.
is unsafe! By the time the blocked thread wakes up, that player may
be gone, along with its struct iop *, and io_write() follows a
dangling pointer. Moreover, at most one thread may use empth_select()
on the same file descriptor. Violations of that restriction cause
threads to hang under Windows since ntthread.c rev. 1.15. Make all
output to another player non-blocking for now. Historically, player
threads sent output only to their socket, though their own iop. This
was broken by flash and asynchronous telegram notification a long time
ago.
strings bytewise unless the stream is buffered. Switch stdout to
line-buffered mode.
(login): Explicitly flush stdout, because Windows doesn't implement
line-buffering faithfully.
incomplete type struct loc_Sem_t. Instead of completing it here, the
code defined an unrelated type loc_Sem_t as (complete) type struct
empth_sem_t. The resulting type errors were swept under the carpet
with casts. Obvious fix.
less one were not removed from the sector. The problem is putsect()
overwriting data from prior put_combat() with old data. Broken in
rev. 1.17. Change lunchbox code to match that of 1.16. Closes
#1219918, reported by Doug Wescott.
(copy_utf8_to_ascii_no_funny): New.
(flash, wall, prmptrd, uprmptrd, getcommand): Use them to filter
input.
(uprnf, pr_flash): Use them to filter output.
(prtoascii): No longer used, remove.
(player_commands, player_commands_index): Internal linkage.
player->argp[]. Assign complete argument vector. This should make
buffer overruns blatantly obvious.
(parse): Don't bother checking SPACE argument, just crash. It is
extremely unlikely that such a programming error wouldn't be
discovered by even them most superficial testing.