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
e5d82bcb
Commit
e5d82bcb
authored
Jul 11, 2018
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(UActivator): refactoring the program termination process
parent
410b0c2f
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
84 additions
and
50 deletions
+84
-50
PassiveLProcessor.cc
extensions/LogicProcessor/PassiveLProcessor.cc
+1
-1
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+3
-3
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+8
-7
SharedMemory.cc
extensions/SharedMemory/SharedMemory.cc
+13
-13
UNetExchange.cc
extensions/UNetUDP/UNetExchange.cc
+2
-2
UniExchange.cc
extensions/UniNetwork/UniExchange.cc
+1
-1
OmniThreadCreator.h
include/OmniThreadCreator.h
+1
-1
UniSetActivator.h
include/UniSetActivator.h
+7
-2
UniSetActivator.cc
src/Core/UniSetActivator.cc
+37
-14
UniSetObject.cc
src/Core/UniSetObject.cc
+8
-3
IOController.cc
src/Processes/IOController.cc
+1
-1
IONotifyController.cc
src/Processes/IONotifyController.cc
+1
-1
ProxyManager.cc
src/Processes/ProxyManager.cc
+1
-1
No files found.
extensions/LogicProcessor/PassiveLProcessor.cc
View file @
e5d82bcb
...
...
@@ -150,7 +150,7 @@ void PassiveLProcessor::sysCommand( const uniset::SystemMessage* sm )
{
if
(
!
shm
->
waitSMreadyWithCancellation
(
smReadyTimeout
,
cannceled
)
)
{
dcrit
<<
myname
<<
"(ERR): SM not ready. Terminated... "
<<
endl
;
dcrit
<<
myname
<<
"(ERR): SM not ready. Terminated... "
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
e5d82bcb
...
...
@@ -3021,7 +3021,7 @@ namespace uniset
if
(
devices
.
empty
()
)
{
mbcrit
<<
myname
<<
"(sysCommand): ************* ITEM MAP EMPTY! terminated... *************"
<<
endl
;
mbcrit
<<
myname
<<
"(sysCommand): ************* ITEM MAP EMPTY! terminated... *************"
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -3056,7 +3056,7 @@ namespace uniset
if
(
!
isProcActive
()
)
{
mbcrit
<<
myname
<<
"(sysCommand): ************* don`t activate?! ************"
<<
endl
;
mbcrit
<<
myname
<<
"(sysCommand): ************* don`t activate?! ************"
<<
endl
<<
flush
;
uterminate
();
return
;
}
...
...
@@ -3132,7 +3132,7 @@ namespace uniset
<<
"(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<<
activateTimeout
<<
" мсек"
;
mbcrit
<<
err
.
str
()
<<
endl
;
mbcrit
<<
err
.
str
()
<<
endl
<<
flush
;
// std::terminate(); // прерываем (перезапускаем) процесс...
uterminate
();
return
;
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
e5d82bcb
...
...
@@ -582,7 +582,7 @@ namespace uniset
if
(
vaddr
.
empty
()
)
{
mbcrit
<<
"(execute_rtu): Unknown my modbus addresses!"
<<
endl
;
mbcrit
<<
"(execute_rtu): Unknown my modbus addresses!"
<<
endl
<<
flush
;
//std::terminate();
uterminate
();
return
;
...
...
@@ -622,7 +622,7 @@ namespace uniset
{
if
(
!
tcpserver
)
{
mbcrit
<<
myname
<<
"(execute_tcp): DYNAMIC CAST ERROR (mbslot --> ModbusTCPServerSlot)"
<<
std
::
endl
;
mbcrit
<<
myname
<<
"(execute_tcp): DYNAMIC CAST ERROR (mbslot --> ModbusTCPServerSlot)"
<<
std
::
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -645,7 +645,7 @@ namespace uniset
if
(
vaddr
.
empty
()
)
{
mbcrit
<<
"(execute_tcp): Unknown my modbus addresses!"
<<
endl
;
mbcrit
<<
"(execute_tcp): Unknown my modbus addresses!"
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -686,7 +686,8 @@ namespace uniset
{
mbcrit
<<
myname
<<
"(execute_tcp): error run tcpserver: "
<<
tcpserver
->
getInetAddress
()
<<
":"
<<
tcpserver
->
getInetPort
()
<<
" err: not active.."
<<
endl
;
<<
":"
<<
tcpserver
->
getInetPort
()
<<
" err: not active.."
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -947,7 +948,7 @@ namespace uniset
{
if
(
iomap
.
empty
()
)
{
mbcrit
<<
myname
<<
"(sysCommand): iomap EMPTY! terminated..."
<<
endl
;
mbcrit
<<
myname
<<
"(sysCommand): iomap EMPTY! terminated..."
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -1049,8 +1050,8 @@ namespace uniset
<<
"(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<<
activateTimeout
<<
" мсек"
;
mbcrit
<<
err
.
str
()
<<
endl
;
kill
(
SIGTERM
,
getpid
());
// прерываем (перезапускаем) процесс...
mbcrit
<<
err
.
str
()
<<
endl
<<
flush
;
uterminate
();
throw
SystemError
(
err
.
str
());
}
...
...
extensions/SharedMemory/SharedMemory.cc
View file @
e5d82bcb
...
...
@@ -270,7 +270,7 @@ namespace uniset
if
(
!
activated
)
{
smcrit
<<
myname
<<
"(sysCommand): Don`t activate [timeout="
<<
activateTimeout
<<
" msec]! TERMINATE.."
<<
endl
;
smcrit
<<
myname
<<
"(sysCommand): Don`t activate [timeout="
<<
activateTimeout
<<
" msec]! TERMINATE.."
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -463,9 +463,9 @@ namespace uniset
<<
") указан неверно ("
<<
it
.
getProp
(
"iotype"
)
<<
") должен быть 'AI'"
;
smcrit
<<
msg
.
str
()
<<
endl
;
kill
(
getpid
(),
SIGTERM
);
// throw NameNotFound
(msg.str());
smcrit
<<
msg
.
str
()
<<
endl
<<
flush
;
uterminate
(
);
throw
SystemError
(
msg
.
str
());
};
HeartBeatInfo
hi
;
...
...
@@ -478,7 +478,7 @@ namespace uniset
{
ostringstream
msg
;
msg
<<
"(SharedMemory::readItem): дискретный датчик (heartbeat_ds_name) связанный с "
<<
it
.
getProp
(
"name"
);
smwarn
<<
msg
.
str
()
<<
endl
;
smwarn
<<
msg
.
str
()
<<
endl
<<
flush
;
}
}
else
...
...
@@ -492,9 +492,9 @@ namespace uniset
// Если уж задали имя для датчика, то он должен существовать..
// поэтому завершаем процесс, если не нашли..
smcrit
<<
msg
.
str
()
<<
endl
;
kill
(
getpid
(),
SIGTERM
);
// throw NameNotFound
(msg.str());
smcrit
<<
msg
.
str
()
<<
endl
<<
flush
;
uterminate
(
);
throw
SystemError
(
msg
.
str
());
}
}
...
...
@@ -507,9 +507,9 @@ namespace uniset
msg
<<
"(SharedMemory::readItem): НЕ УКАЗАН id для "
<<
it
.
getProp
(
"name"
)
<<
" секция "
<<
sec
;
smcrit
<<
msg
.
str
()
<<
endl
;
kill
(
getpid
(),
SIGTERM
);
// throw NameNotFound
(msg.str());
smcrit
<<
msg
.
str
()
<<
endl
<<
flush
;
uterminate
(
);
throw
SystemError
(
msg
.
str
());
};
// без проверки на дублирование т.к.
...
...
@@ -912,7 +912,7 @@ namespace uniset
{
ostringstream
err
;
err
<<
myname
<<
"(initFromReserv): Not found ID for '"
<<
smName
<<
"'"
;
smcrit
<<
err
.
str
()
<<
endl
;
smcrit
<<
err
.
str
()
<<
endl
<<
flush
;
// std::terminate();
uterminate
();
return
;
...
...
@@ -929,7 +929,7 @@ namespace uniset
{
ostringstream
err
;
err
<<
myname
<<
"(initFromReserv): Not found NodeID for '"
<<
smNode
<<
"'"
;
smcrit
<<
err
.
str
()
<<
endl
;
smcrit
<<
err
.
str
()
<<
endl
<<
flush
;
//std::terminate();
uterminate
();
return
;
...
...
extensions/UNetUDP/UNetExchange.cc
View file @
e5d82bcb
...
...
@@ -712,8 +712,8 @@ void UNetExchange::askSensors( UniversalIO::UIOCommand cmd )
<<
"(askSensors): Не дождались готовности(work) SharedMemory к работе в течение "
<<
activateTimeout
<<
" мсек"
;
unetcrit
<<
err
.
str
()
<<
endl
;
kill
(
SIGTERM
,
getpid
());
// прерываем (перезапускаем) процесс...
unetcrit
<<
err
.
str
()
<<
endl
<<
flush
;
uterminate
();
throw
SystemError
(
err
.
str
());
}
...
...
extensions/UniNetwork/UniExchange.cc
View file @
e5d82bcb
...
...
@@ -151,7 +151,7 @@ void UniExchange::execute()
err
<<
myname
<<
"(execute): Не дождались готовности SharedMemory к работе в течение "
<<
smReadyTimeout
<<
" мсек"
;
ucrit
<<
err
.
str
()
<<
endl
;
ucrit
<<
err
.
str
()
<<
endl
<<
flush
;
//throw SystemError(err.str());
//std::terminate();
uterminate
();
...
...
include/OmniThreadCreator.h
View file @
e5d82bcb
...
...
@@ -97,7 +97,7 @@ namespace uniset
typedef
void
(
ThreadMaster
::*
Action
)();
OmniThreadCreator
(
const
std
::
shared_ptr
<
ThreadMaster
>&
m
,
Action
a
,
bool
undetached
=
false
);
~
OmniThreadCreator
()
{}
virtual
~
OmniThreadCreator
()
{}
inline
bool
isRunning
()
{
...
...
include/UniSetActivator.h
View file @
e5d82bcb
...
...
@@ -72,11 +72,15 @@ namespace uniset
// запуск системы
// async = true - асинхронный запуск (создаётся отдельный поток).
void
run
(
bool
async
);
// terminate_control = true - управление процессом завершения (обработка сигналов завершения)
void
run
(
bool
async
,
bool
terminate_control
=
true
);
// штатное завершение работы
void
shutdown
();
// ожидание завершения (если был запуск run(true))
void
join
();
// прерывание работы
void
terminate
();
...
...
@@ -96,7 +100,7 @@ namespace uniset
protected
:
void
w
ork
();
void
mainW
ork
();
// уносим в protected, т.к. Activator должен быть только один..
UniSetActivator
();
...
...
@@ -111,6 +115,7 @@ namespace uniset
std
::
shared_ptr
<
OmniThreadCreator
<
UniSetActivator
>
>
orbthr
;
CORBA
::
ORB_var
orb
;
bool
termControl
=
{
true
};
#ifndef DISABLE_REST_API
std
::
shared_ptr
<
uniset
::
UHttp
::
UHttpServer
>
httpserv
;
...
...
src/Core/UniSetActivator.cc
View file @
e5d82bcb
...
...
@@ -54,6 +54,14 @@ static std::atomic_bool g_done = ATOMIC_VAR_INIT(0);
static
const
int
TERMINATE_TIMEOUT_SEC
=
15
;
// время отведенное на завершение процесса [сек]
// ------------------------------------------------------------------------------------------
struct
ORBThreadDeleter
{
void
operator
()(
OmniThreadCreator
<
UniSetActivator
>*
p
)
const
{
// не удаляем..
}
};
// ---------------------------------------------------------------------------
namespace
uniset
{
UniSetActivatorPtr
UniSetActivator
::
inst
;
...
...
@@ -126,10 +134,11 @@ namespace uniset
}
// ------------------------------------------------------------------------------------------
void
UniSetActivator
::
run
(
bool
thread
)
void
UniSetActivator
::
run
(
bool
thread
,
bool
terminate_control
)
{
ulogsys
<<
myname
<<
"(run): создаю менеджер "
<<
endl
;
termControl
=
terminate_control
;
auto
aptr
=
std
::
static_pointer_cast
<
UniSetActivator
>
(
get_ptr
());
UniSetManager
::
initPOA
(
aptr
);
...
...
@@ -144,7 +153,8 @@ namespace uniset
pman
->
activate
();
msleep
(
50
);
set_signals
(
true
);
if
(
termControl
)
set_signals
(
true
);
#ifndef DISABLE_REST_API
...
...
@@ -168,13 +178,13 @@ namespace uniset
if
(
thread
)
{
uinfo
<<
myname
<<
"(run): запускаемся с созданием отдельного потока... "
<<
endl
;
orbthr
=
make_shared
<
OmniThreadCreator
<
UniSetActivator
>
>
(
aptr
,
&
UniSetActivator
::
work
);
orbthr
=
std
::
shared_ptr
<
OmniThreadCreator
<
UniSetActivator
>>
(
new
OmniThreadCreator
<
UniSetActivator
>
(
aptr
,
&
UniSetActivator
::
mainWork
),
ORBThreadDeleter
()
);
orbthr
->
start
();
}
else
{
uinfo
<<
myname
<<
"(run): запускаемся без создания отдельного потока... "
<<
endl
;
w
ork
();
mainW
ork
();
shutdown
();
}
}
...
...
@@ -189,15 +199,16 @@ namespace uniset
return
;
active
=
false
;
set_signals
(
false
);
if
(
termControl
)
{
std
::
unique_lock
<
std
::
mutex
>
lk
(
g_donemutex
);
g_done
=
false
;
g_finish_guard_thread
=
make_shared
<
std
::
thread
>
(
on_finish_timeout
);
set_signals
(
false
);
{
std
::
unique_lock
<
std
::
mutex
>
lk
(
g_donemutex
);
g_done
=
false
;
g_finish_guard_thread
=
make_shared
<
std
::
thread
>
(
on_finish_timeout
);
}
}
ulogsys
<<
myname
<<
"(shutdown): deactivate... "
<<
endl
;
deactivate
();
ulogsys
<<
myname
<<
"(shutdown): deactivate ok. "
<<
endl
;
...
...
@@ -238,9 +249,6 @@ namespace uniset
ucrit
<<
myname
<<
"(shutdown): "
<<
ex
.
what
()
<<
endl
;
}
if
(
orbthr
)
orbthr
->
join
();
{
std
::
unique_lock
<
std
::
mutex
>
lk
(
g_donemutex
);
g_done
=
true
;
...
...
@@ -252,6 +260,20 @@ namespace uniset
g_finish_guard_thread
->
join
();
}
// ------------------------------------------------------------------------------------------
void
UniSetActivator
::
join
()
{
if
(
g_done
)
return
;
ulogsys
<<
myname
<<
"(join): ..."
<<
endl
;
std
::
unique_lock
<
std
::
mutex
>
lk
(
g_donemutex
);
g_doneevent
.
wait
(
lk
,
[]()
{
return
(
g_done
==
true
);
}
);
}
// ------------------------------------------------------------------------------------------
void
UniSetActivator
::
terminate
()
{
ulogsys
<<
myname
<<
"(terminate): ..."
<<
endl
;
...
...
@@ -262,6 +284,7 @@ namespace uniset
{
auto
act
=
UniSetActivator
::
Instance
();
act
->
shutdown
();
ulogsys
<<
"******** activator_terminate finished **** "
<<
endl
;
}
// ------------------------------------------------------------------------------------------
void
UniSetActivator
::
on_finish_timeout
()
...
...
@@ -340,7 +363,7 @@ namespace uniset
// sigaction(SIGSEGV, &act, &oact);
}
// ------------------------------------------------------------------------------------------
void
UniSetActivator
::
w
ork
()
void
UniSetActivator
::
mainW
ork
()
{
ulogsys
<<
myname
<<
"(work): запускаем orb на обработку запросов..."
<<
endl
;
...
...
src/Core/UniSetObject.cc
View file @
e5d82bcb
...
...
@@ -760,9 +760,14 @@ namespace uniset
}
else
{
uinfo
<<
myname
<<
": ?? не задан ObjectId...("
<<
"myid="
<<
myid
<<
" threadcreate="
<<
threadcreate
<<
")"
<<
endl
;
// выдаём предупреждение только если поток не отключён, но при этом не задан ID
if
(
threadcreate
)
{
uinfo
<<
myname
<<
": ?? не задан ObjectId...("
<<
"myid="
<<
myid
<<
" threadcreate="
<<
threadcreate
<<
")"
<<
endl
;
}
thread
(
false
);
}
...
...
src/Processes/IOController.cc
View file @
e5d82bcb
...
...
@@ -123,7 +123,7 @@ void IOController::activateInit()
}
catch
(
const
uniset
::
Exception
&
ex
)
{
ucrit
<<
myname
<<
"(activateInit): "
<<
ex
<<
endl
;
ucrit
<<
myname
<<
"(activateInit): "
<<
ex
<<
endl
<<
flush
;
//std::terminate();
uterminate
();
}
...
...
src/Processes/IONotifyController.cc
View file @
e5d82bcb
...
...
@@ -772,7 +772,7 @@ void IONotifyController::readConf()
// Если дамп не удалось считать, значит что-то не то в configure.xml
// и безопаснее "вылететь", чем запустится, т.к. часть датчиков не будет работать
// как ожидается.
ucrit
<<
myname
<<
"(IONotifyController::readConf): "
<<
ex
.
what
()
<<
endl
;
ucrit
<<
myname
<<
"(IONotifyController::readConf): "
<<
ex
.
what
()
<<
endl
<<
flush
;
//std::terminate(); // std::abort();
uterminate
();
}
...
...
src/Processes/ProxyManager.cc
View file @
e5d82bcb
...
...
@@ -106,7 +106,7 @@ bool ProxyManager::activateObject()
}
catch
(
const
uniset
::
Exception
&
ex
)
{
ucrit
<<
myname
<<
"(activate): "
<<
ex
<<
endl
;
ucrit
<<
myname
<<
"(activate): "
<<
ex
<<
endl
<<
flush
;
//std::terminate();
uterminate
();
}
...
...
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