Fix socket buffer timeouts precision using the new sbintime_t KPI instead
of relying on the tvtohz() workaround. The latter has been introduced lately by jhb@ (r254699) in order to have a fix that can be backported to STABLE. Reported by: Vitja Makarov <vitja.makarov at gmail dot com> Reviewed by: jhb (earlier version)
This commit is contained in:
parent
8fe6bddff7
commit
7729cbf1a6
@ -411,7 +411,7 @@ db_print_sockbuf(struct sockbuf *sb, const char *sockbufname, int indent)
|
||||
db_print_indent(indent);
|
||||
db_printf("sb_ctl: %u ", sb->sb_ctl);
|
||||
db_printf("sb_lowat: %d ", sb->sb_lowat);
|
||||
db_printf("sb_timeo: %d\n", sb->sb_timeo);
|
||||
db_printf("sb_timeo: %jd\n", sb->sb_timeo);
|
||||
|
||||
db_print_indent(indent);
|
||||
db_printf("sb_flags: 0x%x (", sb->sb_flags);
|
||||
|
@ -127,9 +127,9 @@ sbwait(struct sockbuf *sb)
|
||||
SOCKBUF_LOCK_ASSERT(sb);
|
||||
|
||||
sb->sb_flags |= SB_WAIT;
|
||||
return (msleep(&sb->sb_cc, &sb->sb_mtx,
|
||||
return (msleep_sbt(&sb->sb_cc, &sb->sb_mtx,
|
||||
(sb->sb_flags & SB_NOINTR) ? PSOCK : PSOCK | PCATCH, "sbwait",
|
||||
sb->sb_timeo));
|
||||
sb->sb_timeo, 0, 0));
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -2541,7 +2541,7 @@ sosetopt(struct socket *so, struct sockopt *sopt)
|
||||
int error, optval;
|
||||
struct linger l;
|
||||
struct timeval tv;
|
||||
u_long val;
|
||||
sbintime_t val;
|
||||
uint32_t val32;
|
||||
#ifdef MAC
|
||||
struct mac extmac;
|
||||
@ -2703,7 +2703,7 @@ sosetopt(struct socket *so, struct sockopt *sopt)
|
||||
error = EDOM;
|
||||
goto bad;
|
||||
}
|
||||
val = tvtohz(&tv);
|
||||
val = tvtosbt(tv);
|
||||
|
||||
switch (sopt->sopt_name) {
|
||||
case SO_SNDTIMEO:
|
||||
@ -2857,8 +2857,7 @@ sogetopt(struct socket *so, struct sockopt *sopt)
|
||||
optval = (sopt->sopt_name == SO_SNDTIMEO ?
|
||||
so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
|
||||
|
||||
tv.tv_sec = optval / hz;
|
||||
tv.tv_usec = (optval % hz) * tick;
|
||||
tv = sbttotv(optval);
|
||||
#ifdef COMPAT_FREEBSD32
|
||||
if (SV_CURPROC_FLAG(SV_ILP32)) {
|
||||
struct timeval32 tv32;
|
||||
|
@ -97,7 +97,7 @@ struct sockbuf {
|
||||
u_int sb_mbmax; /* (c/d) max chars of mbufs to use */
|
||||
u_int sb_ctl; /* (c/d) non-data chars in buffer */
|
||||
int sb_lowat; /* (c/d) low water mark */
|
||||
int sb_timeo; /* (c/d) timeout for read/write */
|
||||
sbintime_t sb_timeo; /* (c/d) timeout for read/write */
|
||||
short sb_flags; /* (c/d) flags, see below */
|
||||
int (*sb_upcall)(struct socket *, void *, int); /* (c/d) */
|
||||
void *sb_upcallarg; /* (c/d) */
|
||||
|
Loading…
Reference in New Issue
Block a user