summaryrefslogtreecommitdiff
path: root/storage/ndb/src/common/util/OutputStream.cpp
diff options
context:
space:
mode:
authorunknown <stewart@mysql.com[stewart]>2007-03-22 22:35:07 +1100
committerunknown <stewart@mysql.com[stewart]>2007-03-22 22:35:07 +1100
commitaa8b15b70b80f6c33c05a1aaf3d926bf10715525 (patch)
tree632b950d268067bf0f77e5279446dbd650fea6f1 /storage/ndb/src/common/util/OutputStream.cpp
parentc59722ad839db68b751e2f9be64671edc95cefab (diff)
downloadmariadb-git-aa8b15b70b80f6c33c05a1aaf3d926bf10715525.tar.gz
[PATCH] WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
use portable method, getting milliseconds between calls - Linux would let us do funky stuff by getting the timeout from select(2). Everywhere else sucks and doesn't let us do that :( Index: ndb-work/storage/ndb/include/util/InputStream.hpp =================================================================== storage/ndb/include/util/InputStream.hpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/include/util/OutputStream.hpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/include/util/socket_io.h: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/src/common/util/InputStream.cpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/src/common/util/OutputStream.cpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/src/common/util/socket_io.cpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request storage/ndb/src/mgmsrv/Services.cpp: WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
Diffstat (limited to 'storage/ndb/src/common/util/OutputStream.cpp')
-rw-r--r--storage/ndb/src/common/util/OutputStream.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/storage/ndb/src/common/util/OutputStream.cpp b/storage/ndb/src/common/util/OutputStream.cpp
index ebc352b1b50..0943e47e33f 100644
--- a/storage/ndb/src/common/util/OutputStream.cpp
+++ b/storage/ndb/src/common/util/OutputStream.cpp
@@ -44,7 +44,7 @@ FileOutputStream::println(const char * fmt, ...){
SocketOutputStream::SocketOutputStream(NDB_SOCKET_TYPE socket,
unsigned write_timeout_ms){
m_socket = socket;
- m_timeout_ms = write_timeout_ms;
+ m_timeout_remain= m_timeout_ms = write_timeout_ms;
m_timedout= false;
}
@@ -55,12 +55,18 @@ SocketOutputStream::print(const char * fmt, ...){
if(timedout())
return -1;
+ int time= 0;
va_start(ap, fmt);
- const int ret = vprint_socket(m_socket, m_timeout_ms, fmt, ap);
+ int ret = vprint_socket(m_socket, m_timeout_ms, &time, fmt, ap);
va_end(ap);
- if (errno==ETIMEDOUT)
+ if(ret >= 0)
+ m_timeout_remain-=time;
+ if(errno==ETIMEDOUT || m_timeout_remain<=0)
+ {
m_timedout= true;
+ ret= -1;
+ }
return ret;
}
@@ -71,12 +77,18 @@ SocketOutputStream::println(const char * fmt, ...){
if(timedout())
return -1;
+ int time= 0;
va_start(ap, fmt);
- const int ret = vprintln_socket(m_socket, m_timeout_ms, fmt, ap);
+ int ret = vprintln_socket(m_socket, m_timeout_ms, &time, fmt, ap);
va_end(ap);
- if (errno==ETIMEDOUT)
+ if(ret >= 0)
+ m_timeout_remain-=time;
+ if (errno==ETIMEDOUT || m_timeout_remain<=0)
+ {
m_timedout= true;
+ ret= -1;
+ }
return ret;
}