[ 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)