in looking at a particular situation with Bread, i noticed that it
Bgetc, and Bgetrune differ from Brdstr in what it does with read
returns a count <= 0. Brdstr just returns nil.  Bread sets Binactive.

this wouldn't matter if there were not two fundamentally different
types of notes: alarms and everything else.  (from this perspective
it seems a shame that plan 9 doesn't allow syscalls to be restarted.)

for the interrupted case, this Bread with a different, undocumented,
(and bizarre) recovery strategy.  a Bseek(b, 0, 1) will rejuvinate the
Biobuf for Bread, but one must carefully paste the interrupted slop
together with a second response if one wishes to recover from an
interrupted read.

so, boo.  this seems like a real painful corner case.  and i don't see
any easy way out, unless bio were modified to allow read and write
to be replaced with indirect function calls.  this might be very interesting
for threaded applications.

crazy?

- erik

Reply via email to