-- better error checking for setRecvTimeout and setSendTimeout
Summary:
- could help prevent a 2.6.13 kernel bug
Reviewed By: mcslee, dreiss
Test Plan:
- Testing kernel crashes
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665387 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/transport/TSocket.cpp b/lib/cpp/src/transport/TSocket.cpp
index 2171bab..c216929 100644
--- a/lib/cpp/src/transport/TSocket.cpp
+++ b/lib/cpp/src/transport/TSocket.cpp
@@ -438,13 +438,21 @@
}
void TSocket::setRecvTimeout(int ms) {
+ if (ms < 0) {
+ char errBuf[512];
+ sprintf(errBuf, "TSocket::setRecvTimeout with negative input: %d\n", ms);
+ GlobalOutput(errBuf);
+ return;
+ }
recvTimeout_ = ms;
- recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
- recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
+
if (socket_ < 0) {
return;
}
+ recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
+ recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
+
// Copy because select may modify
struct timeval r = recvTimeval_;
int ret = setsockopt(socket_, SOL_SOCKET, SO_RCVTIMEO, &r, sizeof(r));
@@ -455,7 +463,14 @@
}
void TSocket::setSendTimeout(int ms) {
+ if (ms < 0) {
+ char errBuf[512];
+ sprintf(errBuf, "TSocket::setSendTimeout with negative input: %d\n", ms);
+ GlobalOutput(errBuf);
+ return;
+ }
sendTimeout_ = ms;
+
if (socket_ < 0) {
return;
}