Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
59185a28
Commit
59185a28
authored
Nov 10, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Корректировка процесса завершения работы:
Попытка сделать "прозрачное" и надёжное завершение работы многопоточной программы
parent
f1235b09
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
80 additions
and
73 deletions
+80
-73
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+5
-2
MBTCPMultiMaster.cc
extensions/ModbusMaster/MBTCPMultiMaster.cc
+14
-8
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+8
-2
MBTCPPersistentSlave.cc
extensions/ModbusSlave/MBTCPPersistentSlave.cc
+4
-1
tests_with_sm.sh
extensions/tests/tests_with_sm.sh
+2
-1
ModbusTCPServer.cc
src/Communications/Modbus/ModbusTCPServer.cc
+7
-1
ModbusTCPSession.cc
src/Communications/Modbus/ModbusTCPSession.cc
+2
-0
UniSetActivator.cc
src/ObjectRepository/UniSetActivator.cc
+25
-17
UniSetManager.cc
src/ObjectRepository/UniSetManager.cc
+0
-37
UniSetObject.cc
src/ObjectRepository/UniSetObject.cc
+13
-4
No files found.
extensions/ModbusMaster/MBExchange.cc
View file @
59185a28
...
@@ -329,11 +329,14 @@ void MBExchange::sigterm( int signo )
...
@@ -329,11 +329,14 @@ void MBExchange::sigterm( int signo )
{
{
UniSetObject_LT
::
sigterm
(
signo
);
UniSetObject_LT
::
sigterm
(
signo
);
}
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
{
mbwarn
<<
myname
<<
"SIGTERM("
<<
signo
<<
"): "
<<
ex
.
what
()
<<
endl
;
}
// {
// std::exception_ptr p = std::current_exception();
// std::exception_ptr p = std::current_exception();
// std::clog <<(p ? p.__cxa_exception_type()->name() : "null") << std::endl;
// std::clog <<(p ? p.__cxa_exception_type()->name() : "null") << std::endl;
}
//
}
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void
MBExchange
::
readConfiguration
()
void
MBExchange
::
readConfiguration
()
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
59185a28
...
@@ -343,13 +343,19 @@ void MBTCPMultiMaster::poll_thread()
...
@@ -343,13 +343,19 @@ void MBTCPMultiMaster::poll_thread()
if
(
sidExchangeMode
!=
DefaultObjectId
&&
force
)
if
(
sidExchangeMode
!=
DefaultObjectId
&&
force
)
exchangeMode
=
shm
->
localGetValue
(
itExchangeMode
,
sidExchangeMode
);
exchangeMode
=
shm
->
localGetValue
(
itExchangeMode
,
sidExchangeMode
);
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(poll_thread): "
<<
ex
.
what
()
<<
endl
;
}
try
try
{
{
poll
();
poll
();
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(poll_thread): "
<<
ex
.
what
()
<<
endl
;
}
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
break
;
break
;
...
@@ -443,13 +449,13 @@ void MBTCPMultiMaster::sigterm( int signo )
...
@@ -443,13 +449,13 @@ void MBTCPMultiMaster::sigterm( int signo )
}
}
catch
(
const
std
::
exception
&
ex
)
catch
(
const
std
::
exception
&
ex
)
{
{
cerr
<<
"catch: "
<<
ex
.
what
()
<<
endl
;
mbcrit
<<
myname
<<
"(sigterm): "
<<
ex
.
what
()
<<
std
::
endl
;
}
catch
(
...
)
{
std
::
exception_ptr
p
=
std
::
current_exception
();
std
::
clog
<<
(
p
?
p
.
__cxa_exception_type
()
->
name
()
:
"null"
)
<<
std
::
endl
;
}
}
// catch( ... )
// {
// std::exception_ptr p = std::current_exception();
// std::clog << (p ? p.__cxa_exception_type()->name() : "null") << std::endl;
// }
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
59185a28
...
@@ -904,7 +904,10 @@ bool MBSlave::deactivateObject()
...
@@ -904,7 +904,10 @@ bool MBSlave::deactivateObject()
if
(
mbslot
)
if
(
mbslot
)
mbslot
->
sigterm
(
SIGTERM
);
mbslot
->
sigterm
(
SIGTERM
);
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(deactivateObject): "
<<
ex
.
what
()
<<
endl
;
}
return
UniSetObject_LT
::
deactivateObject
();
return
UniSetObject_LT
::
deactivateObject
();
}
}
...
@@ -920,7 +923,10 @@ void MBSlave::sigterm( int signo )
...
@@ -920,7 +923,10 @@ void MBSlave::sigterm( int signo )
if
(
mbslot
)
if
(
mbslot
)
mbslot
->
sigterm
(
signo
);
mbslot
->
sigterm
(
signo
);
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"SIGTERM("
<<
signo
<<
"): "
<<
ex
.
what
()
<<
endl
;
}
UniSetObject_LT
::
sigterm
(
signo
);
UniSetObject_LT
::
sigterm
(
signo
);
}
}
...
...
extensions/ModbusSlave/MBTCPPersistentSlave.cc
View file @
59185a28
...
@@ -323,7 +323,10 @@ void MBTCPPersistentSlave::execute_tcp()
...
@@ -323,7 +323,10 @@ void MBTCPPersistentSlave::execute_tcp()
}
}
}
}
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(execute_tcp): "
<<
ex
.
what
()
<<
endl
;
}
}
}
mbinfo
<<
myname
<<
"(execute_tcp): thread stopped.."
<<
endl
;
mbinfo
<<
myname
<<
"(execute_tcp): thread stopped.."
<<
endl
;
...
...
extensions/tests/tests_with_sm.sh
View file @
59185a28
...
@@ -10,4 +10,5 @@ cd ../../Utilities/Admin/
...
@@ -10,4 +10,5 @@ cd ../../Utilities/Admin/
cd
-
cd
-
./uniset2-start.sh
-f
./tests_with_sm
$*
--
--confile
tests_with_sm.xml
--e-startup-pause
10
./uniset2-start.sh
-f
./tests_with_sm
$*
--
--confile
tests_with_sm.xml
--e-startup-pause
10
#--ulog-add-levels any
src/Communications/Modbus/ModbusTCPServer.cc
View file @
59185a28
...
@@ -23,7 +23,8 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress& ia, int port ):
...
@@ -23,7 +23,8 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress& ia, int port ):
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
ModbusTCPServer
::~
ModbusTCPServer
()
ModbusTCPServer
::~
ModbusTCPServer
()
{
{
terminate
();
if
(
!
cancelled
)
terminate
();
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPServer
::
setMaxSessions
(
unsigned
int
num
)
void
ModbusTCPServer
::
setMaxSessions
(
unsigned
int
num
)
...
@@ -114,6 +115,11 @@ bool ModbusTCPServer::waitQuery(const std::unordered_set<ModbusAddr>& vmbaddr, t
...
@@ -114,6 +115,11 @@ bool ModbusTCPServer::waitQuery(const std::unordered_set<ModbusAddr>& vmbaddr, t
if
(
dlog
->
is_warn
()
)
if
(
dlog
->
is_warn
()
)
dlog
->
warn
()
<<
"(ModbusTCPServer): "
<<
e
.
what
()
<<
endl
;
dlog
->
warn
()
<<
"(ModbusTCPServer): "
<<
e
.
what
()
<<
endl
;
}
}
catch
(
std
::
exception
&
e
)
{
if
(
dlog
->
is_warn
()
)
dlog
->
warn
()
<<
"(ModbusTCPServer): "
<<
e
.
what
()
<<
endl
;
}
return
false
;
return
false
;
}
}
...
...
src/Communications/Modbus/ModbusTCPSession.cc
View file @
59185a28
...
@@ -116,6 +116,8 @@ void ModbusTCPSession::run()
...
@@ -116,6 +116,8 @@ void ModbusTCPSession::run()
if
(
dlog
->
is_info
()
)
if
(
dlog
->
is_info
()
)
dlog
->
info
()
<<
peername
<<
"(run): thread stopping..."
<<
endl
;
dlog
->
info
()
<<
peername
<<
"(run): thread stopping..."
<<
endl
;
cancelled
=
true
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
ModbusRTU
::
mbErrCode
ModbusTCPSession
::
receive
(
const
std
::
unordered_set
<
ModbusAddr
>&
vmbaddr
,
timeout_t
msec
)
ModbusRTU
::
mbErrCode
ModbusTCPSession
::
receive
(
const
std
::
unordered_set
<
ModbusAddr
>&
vmbaddr
,
timeout_t
msec
)
...
...
src/ObjectRepository/UniSetActivator.cc
View file @
59185a28
...
@@ -94,6 +94,7 @@ static std::shared_ptr<std::thread> g_term_thread;
...
@@ -94,6 +94,7 @@ static std::shared_ptr<std::thread> g_term_thread;
static
std
::
shared_ptr
<
std
::
thread
>
g_fini_thread
;
static
std
::
shared_ptr
<
std
::
thread
>
g_fini_thread
;
static
std
::
shared_ptr
<
std
::
thread
>
g_kill_thread
;
static
std
::
shared_ptr
<
std
::
thread
>
g_kill_thread
;
static
const
int
TERMINATE_TIMEOUT
=
3
;
// время отведенное на завершение процесса [сек]
static
const
int
TERMINATE_TIMEOUT
=
3
;
// время отведенное на завершение процесса [сек]
static
const
int
THREAD_TERMINATE_PAUSE
=
500
;
// [мсек] пауза при завершении потока (см. work())
static
const
int
KILL_TIMEOUT
=
8
;
static
const
int
KILL_TIMEOUT
=
8
;
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
static
void
activator_terminate
(
int
signo
)
static
void
activator_terminate
(
int
signo
)
...
@@ -198,15 +199,21 @@ void terminate_thread()
...
@@ -198,15 +199,21 @@ void terminate_thread()
g_fini_thread
=
make_shared
<
std
::
thread
>
(
finished_thread
);
g_fini_thread
=
make_shared
<
std
::
thread
>
(
finished_thread
);
}
}
ulogsys
<<
"(TERMINATE THREAD): call terminated.."
<<
endl
<<
flush
;
g_act
->
terminated
(
g_signo
);
#if 0
try
try
{
{
ulogsys
<<
"TERMINATE THREAD: destroy.."
<<
endl
;
ulogsys << "TERMINATE THREAD: orb shutdown.." << endl;
g_act
->
orb
->
shutdown
(
true
);
if( g_act->orb )
ulogsys
<<
"TERMINATE THREAD: destroy ok.."
<<
endl
;
g_act->orb->shutdown(true);
ulogsys << "TERMINATE THREAD: orb shutdown ok.." << endl;
}
}
catch( const omniORB::fatalException& fe )
catch( const omniORB::fatalException& fe )
{
{
ulogsys
<<
"(TERMINATE THREAD): :
поймали
omniORB::fatalException:"
<<
endl
;
ulogsys << "(TERMINATE THREAD): : omniORB::fatalException:" << endl;
ulogsys << "(TERMINATE THREAD): file: " << fe.file() << endl;
ulogsys << "(TERMINATE THREAD): file: " << fe.file() << endl;
ulogsys << "(TERMINATE THREAD): line: " << fe.line() << endl;
ulogsys << "(TERMINATE THREAD): line: " << fe.line() << endl;
ulogsys << "(TERMINATE THREAD): mesg: " << fe.errmsg() << endl;
ulogsys << "(TERMINATE THREAD): mesg: " << fe.errmsg() << endl;
...
@@ -215,10 +222,7 @@ void terminate_thread()
...
@@ -215,10 +222,7 @@ void terminate_thread()
{
{
ulogsys << "(TERMINATE THREAD): " << ex.what() << endl;
ulogsys << "(TERMINATE THREAD): " << ex.what() << endl;
}
}
#endif
ulogsys
<<
"(TERMINATE THREAD): call terminated.."
<<
endl
<<
flush
;
g_act
->
terminated
(
g_signo
);
if
(
g_fini_thread
&&
g_fini_thread
->
joinable
()
)
if
(
g_fini_thread
&&
g_fini_thread
->
joinable
()
)
g_fini_thread
->
join
();
g_fini_thread
->
join
();
...
@@ -234,7 +238,7 @@ void terminate_thread()
...
@@ -234,7 +238,7 @@ void terminate_thread()
}
}
catch
(
const
omniORB
::
fatalException
&
fe
)
catch
(
const
omniORB
::
fatalException
&
fe
)
{
{
ulogsys
<<
"(TERMINATE THREAD): :
поймали
omniORB::fatalException:"
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): : omniORB::fatalException:"
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): file: "
<<
fe
.
file
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): file: "
<<
fe
.
file
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): line: "
<<
fe
.
line
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): line: "
<<
fe
.
line
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): mesg: "
<<
fe
.
errmsg
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): mesg: "
<<
fe
.
errmsg
()
<<
endl
;
...
@@ -329,7 +333,7 @@ UniSetActivator::~UniSetActivator()
...
@@ -329,7 +333,7 @@ UniSetActivator::~UniSetActivator()
}
}
g_signo
=
0
;
g_signo
=
0
;
g_termevent
.
notify_one
();
g_termevent
.
notify_one
();
ulogsys
<<
myname
<<
"(
run
): wait done.."
<<
endl
;
ulogsys
<<
myname
<<
"(
~UniSetActivator
): wait done.."
<<
endl
;
#if 1
#if 1
// if( g_term_thread->joinable() )
// if( g_term_thread->joinable() )
// g_term_thread->join();
// g_term_thread->join();
...
@@ -341,7 +345,7 @@ UniSetActivator::~UniSetActivator()
...
@@ -341,7 +345,7 @@ UniSetActivator::~UniSetActivator()
#endif
#endif
ulogsys
<<
myname
<<
"(
run
): wait done OK."
<<
endl
;
ulogsys
<<
myname
<<
"(
~UniSetActivator
): wait done OK."
<<
endl
;
}
}
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
...
@@ -381,7 +385,8 @@ void UniSetActivator::uaDestroy(int signo)
...
@@ -381,7 +385,8 @@ void UniSetActivator::uaDestroy(int signo)
try
try
{
{
ulogsys
<<
myname
<<
"(uaDestroy): shutdown orb... "
<<
endl
;
ulogsys
<<
myname
<<
"(uaDestroy): shutdown orb... "
<<
endl
;
orb
->
shutdown
(
true
);
if
(
orb
)
orb
->
shutdown
(
true
);
ulogsys
<<
myname
<<
"(uaDestroy): shutdown ok."
<<
endl
;
ulogsys
<<
myname
<<
"(uaDestroy): shutdown ok."
<<
endl
;
}
}
catch
(
const
omniORB
::
fatalException
&
fe
)
catch
(
const
omniORB
::
fatalException
&
fe
)
...
@@ -391,12 +396,12 @@ void UniSetActivator::uaDestroy(int signo)
...
@@ -391,12 +396,12 @@ void UniSetActivator::uaDestroy(int signo)
ucrit
<<
myname
<<
"(uaDestroy): line: "
<<
fe
.
line
()
<<
endl
;
ucrit
<<
myname
<<
"(uaDestroy): line: "
<<
fe
.
line
()
<<
endl
;
ucrit
<<
myname
<<
"(uaDestroy): mesg: "
<<
fe
.
errmsg
()
<<
endl
;
ucrit
<<
myname
<<
"(uaDestroy): mesg: "
<<
fe
.
errmsg
()
<<
endl
;
}
}
catch
(
...
)
catch
(
const
std
::
exception
&
ex
)
{
{
u
logsys
<<
myname
<<
"(uaDestroy): orb shutdown: catch... "
<<
endl
;
u
crit
<<
myname
<<
"(uaDestroy): "
<<
ex
.
what
()
<<
endl
;
}
}
ulogsys
<<
myname
<<
"(
stop): shutdown ok
."
<<
endl
;
ulogsys
<<
myname
<<
"(
uaDestroy): begin..
."
<<
endl
;
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
...
@@ -522,8 +527,10 @@ void UniSetActivator::work()
...
@@ -522,8 +527,10 @@ void UniSetActivator::work()
if
(
orbthr
)
if
(
orbthr
)
{
{
// HACK: почему-то мы должны тут застрять,
// HACK: почему-то мы должны тут застрять,
// где-то что-то некорректно с уничтожением потока..
// иначе "где-то" возникает "гонка" с потоком завершения
pause
();
// и мы получаем SIGABRT уже на самом завершении
// (помоему как-то связано с завершением потоков)
msleep
(
THREAD_TERMINATE_PAUSE
);
// pause();
}
}
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
...
@@ -618,6 +625,7 @@ void UniSetActivator::terminated( int signo )
...
@@ -618,6 +625,7 @@ void UniSetActivator::terminated( int signo )
ulogsys
<<
"(terminated): "
<<
ex
.
what
()
<<
endl
;
ulogsys
<<
"(terminated): "
<<
ex
.
what
()
<<
endl
;
}
}
g_term
=
true
;
ulogsys
<<
"terminated ok.."
<<
endl
;
ulogsys
<<
"terminated ok.."
<<
endl
;
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
...
...
src/ObjectRepository/UniSetManager.cc
View file @
59185a28
...
@@ -117,43 +117,6 @@ UniSetManager::UniSetManager(const string& name, const string& section):
...
@@ -117,43 +117,6 @@ UniSetManager::UniSetManager(const string& name, const string& section):
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
UniSetManager
::~
UniSetManager
()
UniSetManager
::~
UniSetManager
()
{
{
try
{
objects
(
deactiv
);
}
catch
(...)
{}
try
{
managers
(
deactiv
);
}
catch
(...)
{}
#if 0
/*
# НЕ МЫ СОЗДАВАЛИ.. НЕ НАМ И УНИЧТОЖАТЬ!
# нужно перейти на shared_ptr<>..
*/
for( auto& i : olist )
{
try
{
delete i;
}
catch(...) {}
}
for( auto& i : mlist )
{
try
{
delete i;
}
catch(...) {}
}
#endif
olist
.
clear
();
olist
.
clear
();
mlist
.
clear
();
mlist
.
clear
();
}
}
...
...
src/ObjectRepository/UniSetObject.cc
View file @
59185a28
...
@@ -132,6 +132,7 @@ UniSetObject::UniSetObject( const string& name, const string& section ):
...
@@ -132,6 +132,7 @@ UniSetObject::UniSetObject( const string& name, const string& section ):
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
UniSetObject
::~
UniSetObject
()
UniSetObject
::~
UniSetObject
()
{
{
#if 0
try
try
{
{
deactivate();
deactivate();
...
@@ -155,6 +156,7 @@ UniSetObject::~UniSetObject()
...
@@ -155,6 +156,7 @@ UniSetObject::~UniSetObject()
}
}
catch(...) {}
catch(...) {}
}
}
#endif
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void
UniSetObject
::
init_object
()
void
UniSetObject
::
init_object
()
...
@@ -638,7 +640,10 @@ bool UniSetObject::deactivate()
...
@@ -638,7 +640,10 @@ bool UniSetObject::deactivate()
{
{
deactivateObject
();
deactivateObject
();
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
return
true
;
return
true
;
}
}
...
@@ -685,7 +690,10 @@ bool UniSetObject::deactivate()
...
@@ -685,7 +690,10 @@ bool UniSetObject::deactivate()
{
{
deactivateObject
();
deactivateObject
();
}
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
unregister
();
unregister
();
PortableServer
::
ObjectId_var
oid
=
poamngr
->
servant_to_id
(
static_cast
<
PortableServer
::
ServantBase
*>
(
this
));
PortableServer
::
ObjectId_var
oid
=
poamngr
->
servant_to_id
(
static_cast
<
PortableServer
::
ServantBase
*>
(
this
));
...
@@ -713,11 +721,12 @@ bool UniSetObject::deactivate()
...
@@ -713,11 +721,12 @@ bool UniSetObject::deactivate()
{
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
<<
endl
;
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
<<
endl
;
}
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
{
uwarn
<<
myname
<<
"(deactivate): "
<<
" catch ..."
<<
endl
;
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
}
return
false
;
return
false
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment