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