Issues with Socket.accept() and SIGUSR1
Adam D. Ruppe
destructionator at gmail.com
Fri Dec 8 23:11:47 UTC 2017
On Friday, 8 December 2017 at 22:27:41 UTC, LeqxLeqx wrote:
> Normally the accept will throw a timeout and then the loop will
> continue to listen, but sometimes (and I can't find a decent
> pattern) the Socket.accept() method will raise a SIGUSR1 rather
> than throwing an exception of any kind.
That probably means the *other* thread started a garbage
collection cycle. The D GC uses that signal to pause threads
while it scans memory, so they don't change out from under it
mid-scan.
All you need to do is try the accept again if that happens. It
isn't really an exception, it is just an EINTR - signal call
interrupted - and you are supposed to just try again when that
happens (unless the interruption meant the program is now
instructed to terminate e.g. SIGINT)
More information about the Digitalmars-d
mailing list