Page MenuHomeFreeBSD

D8535.id32160.diff
No OneTemporary

D8535.id32160.diff

Index: sys/kern/subr_sbuf.c
===================================================================
--- sys/kern/subr_sbuf.c
+++ sys/kern/subr_sbuf.c
@@ -369,8 +369,8 @@
return (s->s_error = EDEADLK);
len = s->s_drain_func(s->s_drain_arg, s->s_buf,
SBUF_DODRAINTOEOR(s) ? s->s_rec_off : s->s_len);
- if (len < 0) {
- s->s_error = -len;
+ if (len <= 0) {
+ s->s_error = len ? -len : EDEADLK;
return (s->s_error);
}
KASSERT(len > 0 && len <= s->s_len,
@@ -640,9 +640,9 @@
break;
/* Cannot print with the current available space. */
if (s->s_drain_func != NULL && s->s_len > 0)
- error = sbuf_drain(s);
- else
- error = sbuf_extend(s, len - SBUF_FREESPACE(s));
+ error = sbuf_drain(s); /* sbuf_drain() sets s_error. */
+ else if (0 != sbuf_extend(s, len - SBUF_FREESPACE(s)))
+ s->s_error = error = ENOMEM;
} while (error == 0);
/*
@@ -659,8 +659,6 @@
s->s_len += len;
if (SBUF_ISSECTION(s))
s->s_sect_len += len;
- if (!SBUF_HASROOM(s) && !SBUF_CANEXTEND(s))
- s->s_error = ENOMEM;
KASSERT(s->s_len < s->s_size,
("wrote past end of sbuf (%d >= %d)", s->s_len, s->s_size));

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 8, 5:05 PM (14 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29390725
Default Alt Text
D8535.id32160.diff (1 KB)

Event Timeline