On Wed, Jan 26, 2011 at 1:37 AM, Robert Watson <email@example.com> wrote:
> On Tue, 25 Jan 2011, Matthew D Fleming wrote:
>> .Dv SBUF_AUTOEXTEND .
>> +.Fn sbuf_new_for_sysctl
>> +function will set up an sbuf with a drain function to use
>> +.Fn SYSCTL_OUT
>> +when the internal buffer fills.
>> +The sysctl old buffer will be wired, which allows for doing an
>> +.Fn sbuf_printf
>> +while holding a mutex.
>> .Fn sbuf_delete
>> function clears the
>> .Fa sbuf
> Hmm. Is this description missing mention of how wiring failures are
> handled? (Also, it should probably mention that this call can sleep for
> potentially quite long periods of time, even if sbuf_printf (and friends)
I'm not sure how much to write, since some of the wiring failures are
dealt with by the sysctl subsystem and are not documented.
The current state of the actual code is that a failure in vslock(9) is
ignored, unless it's ENOMEM in which case sysctl_wire_old_buffer sets
the sysctl_req->validlen to 0, which would behave perhaps slightly
unexpectedly for the user since no data will be copied out.
Any non-ENOMEM failure from vslock() presumably would also have been a
failure from SYSCTL_OUT and this does get squashed, perhaps
I'll think about saving the error code so that sbuf_finish can report
it if nothing else has gone wrong.