[ 
https://issues.apache.org/jira/browse/THRIFT-1642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14537132#comment-14537132
 ] 

ASF GitHub Bot commented on THRIFT-1642:
----------------------------------------

GitHub user jeking3 opened a pull request:

    https://github.com/apache/thrift/pull/485

    THRIFT-1642 pull in patch from Jira to fix signedness issue in timeout 
calculation

    

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/jeking3/thrift 
bugfix/THRIFT-1642-socket-timeout-false-positive

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/thrift/pull/485.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #485
    
----
commit 6c200ce69ecf72267213d0bd7880424c1b842fc9
Author: Jim King <jim.k...@simplivity.com>
Date:   2015-05-10T10:59:17Z

    THRIFT-1642 pull in patch from Jira to fix signedness issue in timeout 
calculation

----


> Miscalculation lead to throw unexpected "TTransportException::TIMED_OUT"(or 
> called "EAGAIN (timed out)") exception
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-1642
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1642
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.8
>         Environment: GNU/Linux x86_64
>            Reporter: catxl
>            Priority: Critical
>         Attachments: TSocket.cpp.patch
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> In function 'uint32_t TSocket::read(uint8_t* buf, uint32_t len)', there's an 
> miscalculation which can lead to wrong judgment:
> struct timeval begin;
> gettimeofday(&begin, NULL);
> //
> // do some thing
> //
> struct timeval end;
> gettimeofday(&end, NULL);
> uint32_t readElapsedMicros =  (((end.tv_sec - begin.tv_sec) * 1000 * 1000)
>                                + (((uint64_t)(end.tv_usec - begin.tv_usec))));
> 'readElapsedMicros' will be very large when 'end.tv_usec < begin.tv_usec'.
> This will lead to throw unexpected "TTransportException::TIMED_OUT"(or called 
> "EAGAIN (timed out)") exception sometimes.
> Besides, 
> (1)I don't think the "usleep(50);" call in the same function above is 
> necessary, I think delete this call could improve performance.
> (2)I don't know why 'readElapsedMicros' compare with 'eagainThresholdMicros', 
> which is not the value (recvTimeout_*1000), but:
>    eagainThresholdMicros = (recvTimeout_*1000)/ ((maxRecvRetries_>0) ? 
> maxRecvRetries_ : 2);
>    can anyone tell me someting about this? Thank you!



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to