Commit d201c7cf authored by Pavel Vainerman's avatar Pavel Vainerman

(UNet): добавил функцию для возожности задать timeout на запуск eventloop.

Если не удалось, процесс вылетает (std::terminate). А также (временно) убрал нестабильный тест на проверку связи.
parent 0d35c405
......@@ -511,6 +511,9 @@ rm -f %buildroot%_libdir/*.la
* Tue Sep 12 2017 Alexei Takaseev <taf@altlinux.org> 2.6-alt19.1
- Rebuild with poco 1.7.9
# * Mon May 29 2017 Pavel Vainerman <pv@altlinux.ru> 2.6-alt21
# - (UNetExchange): add function for setup eventloop timeout
# * Sun May 28 2017 Pavel Vainerman <pv@altlinux.ru> 2.6-alt20
# - (Configuration): fixed bug in check endPoint function
......
......@@ -213,6 +213,12 @@
<item id="3001" infserver="InfoServer" ip="127.0.0.1" name="LocalhostNode1" textname="Локальный узел" unet_ignore="0" unet_port="2049"/>
<item id="3002" ip="192.168.56.10" name="Node1" textname="Node1" unet_ignore="0" unet_port="3001" unet_respond_id="Input1_S" unet_respond_invert="1"/>
<item id="3003" ip="192.168.56.11" name="Node2" textname="Node2" unet_ignore="0" unet_port="3002"/>
<item id="3004" ip="192.168.56.12" name="Node3" textname="Node3"/>
<item id="3005" ip="192.168.56.13" name="Node4" textname="Node4"/>
<item id="3006" ip="192.168.56.14" name="Node5" textname="Node5"/>
<item id="3007" ip="192.168.56.15" name="Node6" textname="Node6"/>
<item id="3008" ip="192.168.56.16" name="Node7" textname="Node7"/>
<item id="3009" ip="192.168.56.17" name="Node8" textname="Node8"/>
</nodes>
<!-- ************************ Датчики ********************** -->
<sensors name="Sensors">
......
......@@ -75,7 +75,8 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
<< "' nodes-filter-value='" << n_fvalue << "'" << endl;
int recvTimeout = conf->getArgPInt("--" + prefix + "-recv-timeout", it.getProp("recvTimeout"), 5000);
int prepareTime = conf->getArgPInt("--" + prefix + "-preapre-time", it.getProp("prepareTime"), 2000);
int prepareTime = conf->getArgPInt("--" + prefix + "-prepare-time", it.getProp("prepareTime"), 2000);
int evrunTimeout = conf->getArgPInt("--" + prefix + "-evrun-timeout", it.getProp("evrunTimeout"), 15000);
int recvpause = conf->getArgPInt("--" + prefix + "-recvpause", it.getProp("recvpause"), 10);
int sendpause = conf->getArgPInt("--" + prefix + "-sendpause", it.getProp("sendpause"), 100);
int updatepause = conf->getArgPInt("--" + prefix + "-updatepause", it.getProp("updatepause"), 100);
......@@ -334,6 +335,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
r->setReceiveTimeout(recvTimeout);
r->setPrepareTime(prepareTime);
r->setEvrunTimeout(evrunTimeout);
r->setLostTimeout(lostTimeout);
r->setReceivePause(recvpause);
r->setUpdatePause(updatepause);
......@@ -362,6 +364,8 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
r2->setLockUpdate(true);
r2->setReceiveTimeout(recvTimeout);
r2->setPrepareTime(prepareTime);
r2->setEvrunTimeout(evrunTimeout);
r2->setLostTimeout(lostTimeout);
r2->setReceivePause(recvpause);
r2->setUpdatePause(updatepause);
......
......@@ -139,6 +139,11 @@ void UNetReceiver::setMaxDifferens( unsigned long set ) noexcept
maxDifferens = set;
}
// -----------------------------------------------------------------------------
void UNetReceiver::setEvrunTimeout( timeout_t msec ) noexcept
{
evrunTimeout = msec;
}
// -----------------------------------------------------------------------------
void UNetReceiver::setRespondID( uniset::ObjectId id, bool invert ) noexcept
{
sidRespond = id;
......@@ -224,7 +229,12 @@ void UNetReceiver::start()
if( !activated )
{
activated = true;
loop.evrun(this, true);
if( !loop.evrun(this, true, evrunTimeout) )
{
unetcrit << myname << "(start): evrun FAILED! (timeout=" << evrunTimeout << " msec)" << endl;
std::terminate();
return;
}
if( upStrategy == useUpdateThread && !upThread->isRunning() )
upThread->start();
......@@ -938,6 +948,7 @@ const std::string UNetReceiver::getShortInfo() const noexcept
<< "\t["
<< " recvTimeout=" << setw(6) << recvTimeout
<< " prepareTime=" << setw(6) << prepareTime
<< " evrunTimeout=" << setw(6) << evrunTimeout
<< " lostTimeout=" << setw(6) << lostTimeout
<< " recvpause=" << setw(6) << recvpause
<< " updatepause=" << setw(6) << updatepause
......
......@@ -137,6 +137,7 @@ namespace uniset
void setPrepareTime( timeout_t msec ) noexcept;
void setCheckConnectionPause( timeout_t msec ) noexcept;
void setMaxDifferens( unsigned long set ) noexcept;
void setEvrunTimeout(timeout_t msec ) noexcept;
void setRespondID( uniset::ObjectId id, bool invert = false ) noexcept;
void setLostPacketsID( uniset::ObjectId id ) noexcept;
......@@ -279,6 +280,7 @@ namespace uniset
PassiveTimer ptPrepare;
timeout_t recvTimeout = { 5000 }; // msec
timeout_t prepareTime = { 2000 };
timeout_t evrunTimeout = { 15000 };
timeout_t lostTimeout = { 200 };
PassiveTimer ptLostTimeout;
size_t lostPackets = { 0 }; /*!< счётчик потерянных пакетов */
......
......@@ -194,6 +194,7 @@ TEST_CASE("[UNetUDP]: sizeOf", "[unetudp][sizeof]")
REQUIRE( len == m.sizeOf() );
}
// -----------------------------------------------------------------------------
#if 0
TEST_CASE("[UNetUDP]: respond sensor", "[unetudp]")
{
InitTest();
......@@ -206,6 +207,7 @@ TEST_CASE("[UNetUDP]: respond sensor", "[unetudp]")
msleep(5000);
REQUIRE( ui->getValue(node1_not_respond_s) == 1 );
}
#endif
// -----------------------------------------------------------------------------
TEST_CASE("[UNetUDP]: check sender", "[unetudp][sender]")
{
......
......@@ -67,7 +67,7 @@ namespace uniset
* Даже если thread = false, но wather не сможет быть "активирован" функция вернёт управление
* с return false.
*/
bool evrun( EvWatcher* w, bool thread = true, size_t waitPrepareTimeout_msec = 8000);
bool evrun( EvWatcher* w, bool thread = true, size_t waitPrepareTimeout_msec = 15000);
/*! \return TRUE - если это был последний EvWatcher и loop остановлен */
bool evstop( EvWatcher* w );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment