On Thu, Mar 22, 2007 at 04:44:48PM -0700, Dan Fandrich wrote:
> If I run the unmodified example/simple/scp program (CVS version), specifying
> a valid username and password on the command line and an invalid file name,
> the program hangs. The final output is:
[...]
> It seems that libssh2_channel_free is waiting for SSH_MSG_CHANNEL_EXTENDED_DATA
> that is never received. If I specify a valid file name, all is well.
I've solved this problem with this patch:
Index: channel.c
===================================================================
RCS file: /cvsroot/libssh2/libssh2/src/channel.c,v
retrieving revision 1.38
diff -u -p -r1.38 channel.c
--- channel.c 7 Feb 2007 21:42:45 -0000 1.38
+++ channel.c 26 Mar 2007 23:56:17 -0000
@@ -1457,8 +1466,8 @@ LIBSSH2_API int libssh2_channel_free(LIB
/* Clear out packets meant for this channel */
libssh2_htonu32(channel_id, channel->local.id);
- while ((libssh2_packet_ask_ex(session, SSH_MSG_CHANNEL_DATA, &data, &data_len, 1, channel_id, 4, 1) >= 0) ||
- (libssh2_packet_ask_ex(session, SSH_MSG_CHANNEL_EXTENDED_DATA, &data, &data_len, 1, channel_id, 4, 1) >= 0)) {
+ while ((libssh2_packet_ask_ex(session, SSH_MSG_CHANNEL_DATA, &data, &data_len, 1, channel_id, 4, 0) >= 0) ||
+ (libssh2_packet_ask_ex(session, SSH_MSG_CHANNEL_EXTENDED_DATA, &data, &data_len, 1, channel_id, 4, 0) >= 0)) {
LIBSSH2_FREE(session, data);
}
This sets the poll_socket flag on these calls to false. Otherwise, when
libssh2_channel_free is called from libssh2_scp_recv, it blocks while
waiting for a data packet that will never arrive because the channel has
already been closed.
I'm not quite sure under which cases the poll_socket flag ought to be set--
I would have thought it should be a nonblocking operation, otherwise, callers
should be using libssh2_packet_require_ex instead of libssh2_packet_ask_ex.
I'm not sure what other implications this patch has. Maybe only the second
line above should be called with poll_socket 0--that fixes the problem as well.
>>> 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-03-27