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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libssh2-devel