> From: Andy Wingo <wi...@pobox.com> > Cc: m...@netris.org, l...@gnu.org, guile-devel@gnu.org > Date: Thu, 14 Jul 2016 12:20:09 +0200 > > On Tue 12 Jul 2016 16:46, Eli Zaretskii <e...@gnu.org> writes: > > >> But in reality the getuid is of this form: > >> > >> (define (load-user-init) > >> (let* ((home (or (getenv "HOME") > >> (false-if-exception (passwd:dir (getpwuid (getuid)))) > >> file-name-separator-string)) ;; fallback for cygwin > >> etc. > >> (init-file (in-vicinity home ".guile"))) > >> (if (file-exists? init-file) > >> (primitive-load init-file)))) > >> > >> So, no problem. > > > > Won't this fail to compile during boot, or at least produce a warning? > > It will produce a warning at compile-time, yes, but no problem at > run-time because of the false-if-exception block.
Sigh. > > The process ID is indeed an int, but my code hides a process handle > > inside it. > > If you don't mind my asking: why? :) Because that's the only way on Windows to make sure the process object is kept around by the kernel. Integer PIDs are reused very quickly on Windows, so by the time you get to scm_waitpid or some other function that wants to query the process, that PID might not exist, or even name a different process. Having a handle open on the process prevents the process object from being recycled. Also, _cwait, used by the Windows emulation of waitpid, needs a handle. > The caller effectively just returns the PID to Scheme, at which > point it has a not-quite-PID floating around. Sounds like trouble > to me. Not sure why you think it's trouble. Can you explain?