On 7 February 2012 13:45, Peter Stuge <pe...@stuge.se> wrote:
> Daniel Stenberg wrote:
>> @@ -1218,16 +1218,17 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * 
>> handle, char *buffer,
>>
>>      while(chunk) {
>>          if(chunk->lefttosend) {
>> +            if(total_read)
>> +                /* since we risk getting EAGAIN below, we return here if 
>> there
>> +                   is data available */
>> +                return total_read;
>> +
>>              rc = _libssh2_channel_write(channel, 0,
>>                                          &chunk->packet[chunk->sent],
>>                                          chunk->lefttosend);
>>              if(rc < 0) {
>> -                if(rc != LIBSSH2_ERROR_EAGAIN)
>> -                    /* error */
>> -                    return rc;
>> -                eagain++;
>>                  sftp->read_state = libssh2_NB_state_sent;
>> -                break;
>> +                return rc;
>>              }
>
> It doesn't seem like there is any point in having this loop anymore,
> since libssh2 must return after every call to _channel_write() in any
> case.

Not every call, right? Only when it returns an error.

Though I think it might be a bug setting libssh2_NB_state_sent on
every error case.  Shouldn't it only happen for EAGAIN?  Otherwise any
channel failure leaves expecting to continue a previous, interrupted,
read rather than starting a new one.

Alex
--
Swish - Easy SFTP for Windows Explorer (http://www.swish-sftp.org)

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to