-- better error checking for setRecvTimeout and setSendTimeout
authorAditya Agarwal <aditya@apache.org>
Tue, 11 Dec 2007 22:23:51 +0000 (22:23 +0000)
committerAditya Agarwal <aditya@apache.org>
Tue, 11 Dec 2007 22:23:51 +0000 (22:23 +0000)
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

lib/cpp/src/transport/TSocket.cpp

index 2171bab..c216929 100644 (file)
@@ -438,13 +438,21 @@ void TSocket::setConnTimeout(int ms) {
 }
 
 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::setRecvTimeout(int ms) {
 }
 
 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;
   }