There's no guarantee that the problem that valgrind is reporting is the cause of your bug of course.
Anyhow, the code in question looks to be this, in threadpool.nim: proc nimSpawn3(fn: WorkerProc; data: pointer) {.compilerProc.} = # implementation of 'spawn' that is used by the code generator. while true: if selectWorker(readyWorker, fn, data): return vs this: proc slave(w: ptr Worker) {.thread.} = isSlave = true while true: when declared(atomicStoreN): atomicStoreN(addr(w.ready), true, ATOMIC_SEQ_CST) else: w.ready = true readyWorker = w