Re: Minor POSIX overhaul

Taylor R Campbell <[email protected]> Wed, 26 Oct 2011 17:22:15 +0000
Newsgroups gmane.lisp.scheme.scheme48
Message-ID <[email protected]>
(Full reply quoted below for posterity after a forgotten cc.)

   Date: Tue, 25 Oct 2011 20:28:17 -0700
   From: Will Noble <[email protected]>

   I haven't changed the way this is accomplished: when POSIX gets initialized
   the C code has knowledge of the value of SIGSTOP from the system headers and
   has knowledge of the position of (signal stop) in the vector holding all the
   named signals, and it conveys this to the Scheme code. I converted the
   _rest_ to Scheme.

OK, that sounds reasonable, as long as you are always careful to make
sure that the OS-dependent numbers are ephemeral and don't make their
way into heap images.

It should really be unnecessary to write most of this code by hand,
but avoiding that nicely is hard and takes a lot more effort than I
have time for these days.  With apologies to posterity, I put some
sketches up at <http://mumble.net/~campbell/tmp/stubber-20100507.tgz>,
in a wretched, unpresentable state only because I don't expect to get
back to this in the foreseeable future.


   Date: Tue, 25 Oct 2011 20:28:17 -0700
   From: Will Noble <[email protected]>

   On Wed, Oct 26, 2011 at 12:53:06AM +0000, Taylor R Campbell wrote:
   > (Did you intend to reply privately, without ccing the list?)
   > 
   >    Date: Tue, 25 Oct 2011 17:33:39 -0700
   >    From: Will Noble <[email protected]>
   > 
   >    Thanks for the quick respone! Is the issue you mention a problem
   >    even when, as before, symbolic errnos/signals resume correctly
   >    (by name) while numeric ones and PIDs are marked unresumable?
   > 
   > You're doing something wrong if you store a pid in a heap image and
   > hope it means anything useful when you resume the heap image.  But
   > there's nothing wrong with storing an object representing EXDEV or
   > SIGSTOP in a heap image and using it meaningfully when the heap image
   > is resumed, independent of what (POSIX) operating system you resume it
   > on.
   > 
   > Granted, errno and signal numbers tend to be constant across all
   > Unices, but there are plenty of similar things that aren't.  (E.g.,
   > getaddrinfo's EAI_* values.)

   Hi,

   Nope. I forgot to cc and I bounced it to the list after I sent it :)

   I did exactly what you say: PIDs refuse to be written to heap images; a
   signal obtained by calling (signal stop) or an errno obtained from (errno
   xdev) retains its value. On the other hand, the signal (integer->signal
   300), like the PID, complains when written out.

   I haven't changed the way this is accomplished: when POSIX gets initialized
   the C code has knowledge of the value of SIGSTOP from the system headers and
   has knowledge of the position of (signal stop) in the vector holding all the
   named signals, and it conveys this to the Scheme code. I converted the
   _rest_ to Scheme.

   Best,
   Will