Nim Compiler Version 0.17.3 (2017-10-25) [Linux: amd64]
Copyright (c) 2006-2017 by Andreas Rumpf
git hash: fa02ffaeba219ca3f259667d5161d30e47bb13e0
active boot switches: -d:release
* * *
Code:
import os except sleep
import posix, strutils
import threadpool
when isMainModule:
proc main() =
var i = 0
while true:
i.inc()
echo i
discard sleep(1)
if fork() == 0:
echo("Hello from the child!")
spawn main()
threadpool.sync()
else:
quit(QUITSUCCESS)
* * *
I was using
[https://github.com/OpenSystemsLab/daemonize.nim](https://github.com/OpenSystemsLab/daemonize.nim)
to try and write a simple daemon.
I ran into a problem where invoking threadpool's spawn from a forked process
resulted in a deadlock.
The code above is a simplified example from how I am using daemonize.nim.
* * *
strace: Process 146711 attached
futex(0x65dd24, FUTEX_WAIT_PRIVATE, 1, NULL)
* * *
Is there any way around this? I couldn't find anything explicitly prohibiting
threadpool from being used like this.