summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaroslav Brustinov <ybrustin@cisco.com>2017-01-01 02:48:04 +0200
committerYaroslav Brustinov <ybrustin@cisco.com>2017-01-01 02:48:04 +0200
commita56ae96bdbfe53894aad17192cd21d43c6e8a289 (patch)
tree9118f3caecc520e5f1094836bcd016b137754291
parentf819379b4a6c08270651b381118f0282c4163792 (diff)
alter the watchdog timeout before push_remote and after, due to possible long io
Change-Id: Ibddf830dbed8ee36c75113267645a576e38efa31 Signed-off-by: Yaroslav Brustinov <ybrustin@cisco.com>
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp11
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.cpp12
-rw-r--r--src/trex_watchdog.cpp6
3 files changed, 25 insertions, 4 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index d4854a79..82cbaca1 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -649,12 +649,23 @@ TrexRpcCmdPushRemote::_run(const Json::Value &params, Json::Value &result) {
}
+ /* IO might take time, increase timeout of WD */
+ TrexMonitor * cur_monitor = TrexWatchDog::getInstance().get_current_monitor();
+ if (cur_monitor != NULL) {
+ cur_monitor->io_begin();
+ }
+
try {
port->push_remote(pcap_filename, ipg_usec, min_ipg_sec, speedup, count, duration, is_dual);
} catch (const TrexException &ex) {
generate_execute_err(result, ex.what());
}
+ /* revert timeout of WD */
+ if (cur_monitor != NULL) {
+ cur_monitor->io_end();
+ }
+
result["result"] = Json::objectValue;
return (TREX_RPC_CMD_OK);
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp
index ed130c29..0a317170 100644
--- a/src/stateless/dp/trex_stateless_dp_core.cpp
+++ b/src/stateless/dp/trex_stateless_dp_core.cpp
@@ -1281,6 +1281,12 @@ bool CGenNodePCAP::create(uint8_t port_id,
m_dir = dir;
m_min_ipg_sec = min_ipg_sec;
+ /* increase timeout of WD due to io */
+ TrexMonitor * cur_monitor = TrexWatchDog::getInstance().get_current_monitor();
+ if (cur_monitor != NULL) {
+ cur_monitor->io_begin();
+ }
+
/* mark this node as slow path */
set_slow_path(true);
@@ -1344,6 +1350,12 @@ void CGenNodePCAP::destroy() {
m_reader = NULL;
}
+ /* end of io, return normal timeout of WD */
+ TrexMonitor * cur_monitor = TrexWatchDog::getInstance().get_current_monitor();
+ if (cur_monitor != NULL) {
+ cur_monitor->io_end();
+ }
+
m_state = PCAP_INVALID;
}
diff --git a/src/trex_watchdog.cpp b/src/trex_watchdog.cpp
index d2b6b803..8a06746b 100644
--- a/src/trex_watchdog.cpp
+++ b/src/trex_watchdog.cpp
@@ -155,16 +155,14 @@ void TrexWatchDog::init(bool enable){
*
*/
TrexMonitor * TrexWatchDog::get_current_monitor() {
- TrexMonitor * cur_monitor = NULL;
for (int i = 0; i < m_mon_count; i++) {
if ( m_monitors[i]->get_tid() == pthread_self() ) {
- cur_monitor = m_monitors[i];
- break;
+ return m_monitors[i];
}
}
- return cur_monitor;
+ return NULL;
}