ref: 330b2e6a59402d3a290629f409d77c2692973f3c
dir: /lib/thread/spawn+plan9.myr/
use std use sys use "tls" pkg thread = type tid = uint64 const spawn : (fn : (-> void) -> std.result(tid, byte[:])) ;; const spawn = {fn var p, s fn = std.fndup(fn) match sys.rfork(sys.Rfproc | sys.Rfmem) | 0: if ntlsslots > Staticcap p = getpriv() s = std.slalloc(ntlsslots) p[0] = (s : void#) ;; fn() std.fnfree(fn) if ntlsslots > Staticcap p = getpriv() s = (p[0] : void##)[:ntlsslots] std.slfree(s) ;; std.exit(0) | -1: std.fnfree(fn) -> `std.Err "unable to spawn thread" | thr: -> `std.Ok (thr : tid) ;; }