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
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
76 additions
and
69 deletions
+76
-69
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
+1
-0
ModbusTCPServer.cc
src/Communications/Modbus/ModbusTCPServer.cc
+6
-0
ModbusTCPSession.cc
src/Communications/Modbus/ModbusTCPSession.cc
+2
-0
UniSetActivator.cc
src/ObjectRepository/UniSetActivator.cc
+23
-15
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 )
{
UniSetObject_LT
::
sigterm
(
signo
);
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"SIGTERM("
<<
signo
<<
"): "
<<
ex
.
what
()
<<
endl
;
}
// {
// std::exception_ptr p = std::current_exception();
// std::clog <<(p ? p.__cxa_exception_type()->name() : "null") << std::endl;
}
//
}
}
// ------------------------------------------------------------------------------------------
void
MBExchange
::
readConfiguration
()
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
59185a28
...
...
@@ -343,13 +343,19 @@ void MBTCPMultiMaster::poll_thread()
if
(
sidExchangeMode
!=
DefaultObjectId
&&
force
)
exchangeMode
=
shm
->
localGetValue
(
itExchangeMode
,
sidExchangeMode
);
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(poll_thread): "
<<
ex
.
what
()
<<
endl
;
}
try
{
poll
();
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(poll_thread): "
<<
ex
.
what
()
<<
endl
;
}
if
(
!
checkProcActive
()
)
break
;
...
...
@@ -443,13 +449,13 @@ void MBTCPMultiMaster::sigterm( int signo )
}
catch
(
const
std
::
exception
&
ex
)
{
cerr
<<
"catch: "
<<
ex
.
what
()
<<
endl
;
}
catch
(
...
)
{
std
::
exception_ptr
p
=
std
::
current_exception
();
std
::
clog
<<
(
p
?
p
.
__cxa_exception_type
()
->
name
()
:
"null"
)
<<
std
::
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;
// }
}
// -----------------------------------------------------------------------------
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
59185a28
...
...
@@ -904,7 +904,10 @@ bool MBSlave::deactivateObject()
if
(
mbslot
)
mbslot
->
sigterm
(
SIGTERM
);
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"(deactivateObject): "
<<
ex
.
what
()
<<
endl
;
}
return
UniSetObject_LT
::
deactivateObject
();
}
...
...
@@ -920,7 +923,10 @@ void MBSlave::sigterm( int signo )
if
(
mbslot
)
mbslot
->
sigterm
(
signo
);
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
mbwarn
<<
myname
<<
"SIGTERM("
<<
signo
<<
"): "
<<
ex
.
what
()
<<
endl
;
}
UniSetObject_LT
::
sigterm
(
signo
);
}
...
...
extensions/ModbusSlave/MBTCPPersistentSlave.cc
View file @
59185a28
...
...
@@ -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
;
...
...
extensions/tests/tests_with_sm.sh
View file @
59185a28
...
...
@@ -11,3 +11,4 @@ cd ../../Utilities/Admin/
cd
-
./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,6 +23,7 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress& ia, int port ):
// -------------------------------------------------------------------------
ModbusTCPServer
::~
ModbusTCPServer
()
{
if
(
!
cancelled
)
terminate
();
}
// -------------------------------------------------------------------------
...
...
@@ -114,6 +115,11 @@ bool ModbusTCPServer::waitQuery(const std::unordered_set<ModbusAddr>& vmbaddr, t
if
(
dlog
->
is_warn
()
)
dlog
->
warn
()
<<
"(ModbusTCPServer): "
<<
e
.
what
()
<<
endl
;
}
catch
(
std
::
exception
&
e
)
{
if
(
dlog
->
is_warn
()
)
dlog
->
warn
()
<<
"(ModbusTCPServer): "
<<
e
.
what
()
<<
endl
;
}
return
false
;
}
...
...
src/Communications/Modbus/ModbusTCPSession.cc
View file @
59185a28
...
...
@@ -116,6 +116,8 @@ void ModbusTCPSession::run()
if
(
dlog
->
is_info
()
)
dlog
->
info
()
<<
peername
<<
"(run): thread stopping..."
<<
endl
;
cancelled
=
true
;
}
// -------------------------------------------------------------------------
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;
static
std
::
shared_ptr
<
std
::
thread
>
g_fini_thread
;
static
std
::
shared_ptr
<
std
::
thread
>
g_kill_thread
;
static
const
int
TERMINATE_TIMEOUT
=
3
;
// время отведенное на завершение процесса [сек]
static
const
int
THREAD_TERMINATE_PAUSE
=
500
;
// [мсек] пауза при завершении потока (см. work())
static
const
int
KILL_TIMEOUT
=
8
;
// ------------------------------------------------------------------------------------------
static
void
activator_terminate
(
int
signo
)
...
...
@@ -198,15 +199,21 @@ void terminate_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
{
ulogsys
<<
"TERMINATE THREAD: destroy.."
<<
endl
;
ulogsys << "TERMINATE THREAD: orb shutdown.." << endl;
if( g_act->orb )
g_act->orb->shutdown(true);
ulogsys
<<
"TERMINATE THREAD:
destroy
ok.."
<<
endl
;
ulogsys << "TERMINATE THREAD:
orb shutdown
ok.." << endl;
}
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): line: " << fe.line() << endl;
ulogsys << "(TERMINATE THREAD): mesg: " << fe.errmsg() << endl;
...
...
@@ -215,10 +222,7 @@ void terminate_thread()
{
ulogsys << "(TERMINATE THREAD): " << ex.what() << endl;
}
ulogsys
<<
"(TERMINATE THREAD): call terminated.."
<<
endl
<<
flush
;
g_act
->
terminated
(
g_signo
);
#endif
if
(
g_fini_thread
&&
g_fini_thread
->
joinable
()
)
g_fini_thread
->
join
();
...
...
@@ -234,7 +238,7 @@ void terminate_thread()
}
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): line: "
<<
fe
.
line
()
<<
endl
;
ulogsys
<<
"(TERMINATE THREAD): mesg: "
<<
fe
.
errmsg
()
<<
endl
;
...
...
@@ -329,7 +333,7 @@ UniSetActivator::~UniSetActivator()
}
g_signo
=
0
;
g_termevent
.
notify_one
();
ulogsys
<<
myname
<<
"(
run
): wait done.."
<<
endl
;
ulogsys
<<
myname
<<
"(
~UniSetActivator
): wait done.."
<<
endl
;
#if 1
// if( g_term_thread->joinable() )
// g_term_thread->join();
...
...
@@ -341,7 +345,7 @@ UniSetActivator::~UniSetActivator()
#endif
ulogsys
<<
myname
<<
"(
run
): wait done OK."
<<
endl
;
ulogsys
<<
myname
<<
"(
~UniSetActivator
): wait done OK."
<<
endl
;
}
}
// ------------------------------------------------------------------------------------------
...
...
@@ -381,6 +385,7 @@ void UniSetActivator::uaDestroy(int signo)
try
{
ulogsys
<<
myname
<<
"(uaDestroy): shutdown orb... "
<<
endl
;
if
(
orb
)
orb
->
shutdown
(
true
);
ulogsys
<<
myname
<<
"(uaDestroy): shutdown ok."
<<
endl
;
}
...
...
@@ -391,12 +396,12 @@ void UniSetActivator::uaDestroy(int signo)
ucrit
<<
myname
<<
"(uaDestroy): line: "
<<
fe
.
line
()
<<
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()
if
(
orbthr
)
{
// HACK: почему-то мы должны тут застрять,
// где-то что-то некорректно с уничтожением потока..
pause
();
// иначе "где-то" возникает "гонка" с потоком завершения
// и мы получаем SIGABRT уже на самом завершении
// (помоему как-то связано с завершением потоков)
msleep
(
THREAD_TERMINATE_PAUSE
);
// pause();
}
}
// ------------------------------------------------------------------------------------------
...
...
@@ -618,6 +625,7 @@ void UniSetActivator::terminated( int signo )
ulogsys
<<
"(terminated): "
<<
ex
.
what
()
<<
endl
;
}
g_term
=
true
;
ulogsys
<<
"terminated ok.."
<<
endl
;
}
// ------------------------------------------------------------------------------------------
...
...
src/ObjectRepository/UniSetManager.cc
View file @
59185a28
...
...
@@ -117,43 +117,6 @@ UniSetManager::UniSetManager(const string& name, const string& section):
// ------------------------------------------------------------------------------------------
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
();
mlist
.
clear
();
}
...
...
src/ObjectRepository/UniSetObject.cc
View file @
59185a28
...
...
@@ -132,6 +132,7 @@ UniSetObject::UniSetObject( const string& name, const string& section ):
// ------------------------------------------------------------------------------------------
UniSetObject
::~
UniSetObject
()
{
#if 0
try
{
deactivate();
...
...
@@ -155,6 +156,7 @@ UniSetObject::~UniSetObject()
}
catch(...) {}
}
#endif
}
// ------------------------------------------------------------------------------------------
void
UniSetObject
::
init_object
()
...
...
@@ -638,7 +640,10 @@ bool UniSetObject::deactivate()
{
deactivateObject
();
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
return
true
;
}
...
...
@@ -685,7 +690,10 @@ bool UniSetObject::deactivate()
{
deactivateObject
();
}
catch
(...)
{}
catch
(
std
::
exception
&
ex
)
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
unregister
();
PortableServer
::
ObjectId_var
oid
=
poamngr
->
servant_to_id
(
static_cast
<
PortableServer
::
ServantBase
*>
(
this
));
...
...
@@ -713,11 +721,12 @@ bool UniSetObject::deactivate()
{
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
<<
endl
;
}
catch
(
...
)
catch
(
std
::
exception
&
ex
)
{
uwarn
<<
myname
<<
"(deactivate): "
<<
" catch ..."
<<
endl
;
uwarn
<<
myname
<<
"(deactivate): "
<<
ex
.
what
()
<<
endl
;
}
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