Hi. I just discovered that one of my applications that uses libssh2 (version 0.14) for SFTP was sitting in an infinite loop at 100% CPU utilization. I pointed gdb at it and discovered that it was spinning in libssh2_channel_read_ex(). This routine keeps calling libssh2_packet_read(), which is returning 0 in the first 'if' statement since the session->socket_state == LIBSSH2_SOCKET_DISCONNECTED.
It then falls down to the 'while' at line 937: } while (channel->blocking && (bytes_read == 0) && !channel->remote.close); which just causes the routine to go back and do the same thing again, forever. It looks like the statement at line 711 of packet.c in routine libssh2_packet_read(): if (session->socket_state == LIBSSH2_SOCKET_DISCONNECTED) { return 0 }; should be: if (session->socket_state == LIBSSH2_SOCKET_DISCONNECTED) { return -1; } so that the above while loop will fall through and do the right thing. Can somebody check me out on this? I'm not at all familiar with libssh2 (I'm using it for SFTP via the perl module Net::SFTP). Thanks, Bill Schell ------------------------------------------------------------------------- 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