Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Matt Johnston
dropbear
Commits
a3049d64
Commit
a3049d64
authored
Nov 27, 2015
by
Matt Johnston
Browse files
Fix "Avoid queueing into circbuffer when the channel is about to close"
which broken handling EAGAIN/EINTR
parent
ee353847
Changes
1
Show whitespace changes
Inline
Side-by-side
common-channel.c
View file @
a3049d64
...
...
@@ -445,9 +445,10 @@ static int writechannel_fallback(struct Channel* channel, int fd, circbuffer *cb
close_chan_fd
(
channel
,
fd
,
SHUT_WR
);
return
DROPBEAR_FAILURE
;
}
}
}
else
{
cbuf_incrread
(
cbuf
,
written
);
channel
->
recvdonelen
+=
written
;
}
return
DROPBEAR_SUCCESS
;
}
#endif
/* !HAVE_WRITEV */
...
...
@@ -460,7 +461,7 @@ static int writechannel_writev(struct Channel* channel, int fd, circbuffer *cbuf
unsigned
char
*
circ_p1
,
*
circ_p2
;
unsigned
int
circ_len1
,
circ_len2
;
int
io_count
=
0
;
int
cbuf_written
;
ssize_t
written
;
cbuf_readptrs
(
cbuf
,
&
circ_p1
,
&
circ_len1
,
&
circ_p2
,
&
circ_len2
);
...
...
@@ -508,14 +509,14 @@ static int writechannel_writev(struct Channel* channel, int fd, circbuffer *cbuf
close_chan_fd
(
channel
,
fd
,
SHUT_WR
);
return
DROPBEAR_FAILURE
;
}
}
cbuf_written
=
MIN
(
circ_len1
+
circ_len2
,
(
unsigned
int
)
written
);
}
else
{
int
cbuf_written
=
MIN
(
circ_len1
+
circ_len2
,
(
unsigned
int
)
written
);
cbuf_incrread
(
cbuf
,
cbuf_written
);
if
(
morelen
)
{
*
morelen
=
written
-
cbuf_written
;
}
channel
->
recvdonelen
+=
written
;
}
return
DROPBEAR_SUCCESS
;
}
#endif
/* HAVE_WRITEV */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment