9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Charles Forsyth <forsyth@terzarima.net>
To: 9fans@9fans.net
Subject: Re: [9fans] a pair nec bugs
Date: Sat, 21 May 2011 10:59:33 +0100	[thread overview]
Message-ID: <ffc26a1aba541310fc0935f30717b668@terzarima.net> (raw)
In-Reply-To: <edcfbdc9e2482002efd4dc8adb011fa7@brasstown.quanstro.net>

the most straightforward fix for nsec
is to change it back to do the obvious thing: open the file,
read in the time data, close the file and return the value.

we might like to add the cache back in, since a grep of /sys/src/cmd
suggests that it might be useful to do that.
most programs were fine with a statically-allocated
file descriptor, closed on exec, and using pread not read
to avoid the shared offset. complications arose with
forks when file descriptors were rearranged, sometimes with an extra twist when
the forks share data apart from the stack. programs do those things
by explicit calls.

we've had several attempts at trying to guess in the library's
guts when the cached value(s) have gone wrong, but they haven't worked
because there are too many cases and the library function can't detect them precisely
if at all. also, using the current process as the cache key probably isn't right:
often it's fine for the file descriptor to be shared by a group;
on the other hand, if each process has its own file descriptor,
there's no way to tell when the descriptors have been rearranged.
nor can the program currently tell the library what it has done.

file descriptors are just one form of shared state.
is it possible to devise a call or pair of calls
to manage library state such as shared file descriptors and static values
for a process or group of related processes?  it seems tricky,
and probably overly elaborate, since a memo about
existence of some state to invalidate is itself state.

perhaps it is better for each relevant library module to expose the
existence of its cached state through a function call to invalidate it
(or otherwise manage it explicitly) when needed.

syslog, times and truerand(!) also would benefit.
of all of them so far, only times(2) really is per-process.



  reply	other threads:[~2011-05-21  9:59 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-20  1:30 erik quanstrom
2011-05-20  5:05 ` [9fans] a pair nsec bugs erik quanstrom
2011-05-20 10:43 ` [9fans] a pair nec bugs ron minnich
2011-05-20 10:52   ` roger peppe
2011-05-20 10:57     ` ron minnich
2011-05-20 12:47   ` erik quanstrom
2011-05-20 19:03     ` ron minnich
2011-05-20 19:16       ` erik quanstrom
2011-05-21  3:27       ` erik quanstrom
2011-05-21  9:59         ` Charles Forsyth [this message]
2011-05-21 12:16           ` erik quanstrom
2011-05-21 21:50           ` erik quanstrom
2011-05-21 22:14             ` Charles Forsyth
2011-05-22  3:06               ` erik quanstrom
2011-05-22 13:30                 ` Charles Forsyth
2011-06-02 19:16                   ` erik quanstrom
2011-06-03  9:52                     ` Charles Forsyth
2011-06-04 18:12                       ` adriano
2011-06-03 13:13 erik quanstrom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ffc26a1aba541310fc0935f30717b668@terzarima.net \
    --to=forsyth@terzarima.net \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).