On Mon, Mar 26, 2007 at 04:15:36PM -0700, Dan Fandrich wrote:
> I've added some scp tests to curl's test suite which use libssh2, and
> I've found that the test file uploads (which are 30 byte files) are
> corrupted sometimes. The uploaded files end up being 0 length. Running
> the tests several times in succession usually causes it to work at least
> once, so it looks like a timing related problem. I've tested on Linux
> x86 systems using both 2.4 and 2.6 kernels and OpenSSH 3.1 and 3.9.
The following patch fixes this problem for me. If a channel close message
has not been received by the time libssh2_channel_close is called,
this waits for it.
RCS file: /cvsroot/libssh2/libssh2/src/channel.c,v
retrieving revision 1.39
diff -u -r1.39 channel.c
--- channel.c 31 Mar 2007 20:28:29 -0000 1.39
+++ channel.c 5 Apr 2007 21:36:18 -0000
@@ -1381,6 +1381,7 @@
{
LIBSSH2_SESSION *session = channel->session;
unsigned char packet[5];
+ int rc = 0;
if (channel->local.close) {
/* Already closed, act like we sent another close, even though we didn't... shhhhhh */
@@ -1401,9 +1402,22 @@
return -1;
}
- /* TODO: Wait up to a timeout value for a CHANNEL_CLOSE to come back, to avoid the problem alluded to in channel_nextid */
+ /* Wait for the remote SSH_MSG_CHANNEL_CLOSE message */
+ if (!channel->remote.close) {
+ libssh2pack_t ret;
+ /* set blocking mode */
+ int bl = _libssh2_channel_set_blocking(channel, 1);
+ do {
+ ret = libssh2_packet_read(session);
+ if ((ret < 0) && (ret != PACKET_EAGAIN)) {
+ rc = -1;
+ }
+ } while (ret != SSH_MSG_CHANNEL_CLOSE && rc == 0);
- return 0;
+ _libssh2_channel_set_blocking(channel, bl);
+ }
+
+ return rc;
}
/* }}} */
>>> Dan
-- http://www.MoveAnnouncer.com The web change of address service Let webmasters know that your web site has moved ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ libssh2-devel mailing list libssh2-devel_at_lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libssh2-develReceived on 2007-04-05