Subj : src/syncterm/conn_pty.c modem.c ripper.c rlogin.c ssh.c To : Git commit to main/sbbs/master From : Deucе Date : Wed Apr 26 2023 04:25 pm https://gitlab.synchro.net/main/sbbs/-/commit/62aa99b82827a4d473963093 Modified Files: src/syncterm/conn_pty.c modem.c ripper.c rlogin.c ssh.c Log Message: Don't commit to waits more than 100ms in a connection This works around an issue on macOS and Linux where a select() or poll() in thread X won't return when close() is called on the same socket in thread Y. We also set the descriptor/handle/whatever to an invalid value while waiting for io threads to terminate so that a close() in one thread won't cause other threads to possibly interact with a new descriptor created after the close(). This isn't actually something that can happen in SyncTERM, but it's worth protecting against. Finally, don't call close() until after all io threads have terminated. This prevents the descriptor from becoming available to other syscalls while threads are closing, and prevents operations on an invalid descriptor. This is still not safe on platforms where a descriptor value write is not atomic, but I don't think I support any platform like that. Reported as #212 in github, and 75 on SourceForge. .