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
ab0cf843
Commit
ab0cf843
authored
Jan 12, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Начало работы над переходом на weak_ptr в работе UniSetObject,UniSetManager,UniSetActivator
parent
84dd804d
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
51 additions
and
42 deletions
+51
-42
UniSetManager.h
include/UniSetManager.h
+1
-1
UniSetObject.h
include/UniSetObject.h
+4
-4
UniSetActivator.cc
src/ObjectRepository/UniSetActivator.cc
+1
-1
UniSetManager.cc
src/ObjectRepository/UniSetManager.cc
+16
-12
UniSetObject.cc
src/ObjectRepository/UniSetObject.cc
+29
-24
No files found.
include/UniSetManager.h
View file @
ab0cf843
...
...
@@ -72,7 +72,7 @@ class UniSetManager:
virtual
UniSetTypes
::
SimpleInfoSeq
*
getObjectsInfo
(
CORBA
::
Long
MaxLength
=
300
)
override
;
// --------------------------
void
initPOA
(
UniSetManager
*
rmngr
);
void
initPOA
(
const
std
::
weak_ptr
<
UniSetManager
>&
rmngr
);
virtual
bool
addObject
(
const
std
::
shared_ptr
<
UniSetObject
>&
obj
);
virtual
bool
removeObject
(
const
std
::
shared_ptr
<
UniSetObject
>&
obj
);
...
...
include/UniSetObject.h
View file @
ab0cf843
...
...
@@ -193,7 +193,7 @@ class UniSetObject:
inline
void
setActive
(
bool
set
){
active
=
set
;
}
UniSetTypes
::
VoidMessage
msg
;
UniSetManager
*
mymngr
;
std
::
weak_ptr
<
UniSetManager
>
mymngr
;
void
setThreadPriority
(
int
p
);
...
...
@@ -208,10 +208,10 @@ class UniSetObject:
}
/*! функция потока */
void
work
();
void
work
();
//! Инициализация параметров объекта
bool
init
(
UniSetManager
*
om
);
//! Прямая деактивизация объекта
bool
init
(
const
std
::
weak_ptr
<
UniSetManager
>&
om
);
//! Прямая деактивизация объекта
bool
deactivate
();
//! Непосредственная активизация объекта
bool
activate
();
...
...
src/ObjectRepository/UniSetActivator.cc
View file @
ab0cf843
...
...
@@ -256,7 +256,7 @@ void UniSetActivator::run( bool thread )
{
ulogsys
<<
myname
<<
"(run): создаю менеджер "
<<
endl
;
UniSetManager
::
initPOA
(
this
);
UniSetManager
::
initPOA
(
get_aptr
()
);
if
(
getId
()
==
UniSetTypes
::
DefaultObjectId
)
offThread
();
// отключение потока обработки сообщений, раз не задан ObjectId
...
...
src/ObjectRepository/UniSetManager.cc
View file @
ab0cf843
...
...
@@ -152,19 +152,23 @@ UniSetManager::~UniSetManager()
mlist
.
clear
();
}
// ------------------------------------------------------------------------------------------
void
UniSetManager
::
initPOA
(
UniSetManager
*
rmngr
)
void
UniSetManager
::
initPOA
(
const
std
::
weak_ptr
<
UniSetManager
>&
rmngr
)
{
auto
m
=
rmngr
.
lock
();
if
(
!
m
)
{
ostringstream
err
;
err
<<
myname
<<
"(initPOA): failed weak_ptr !!"
;
ucrit
<<
err
.
str
()
<<
endl
;
throw
SystemError
(
err
.
str
());
}
if
(
CORBA
::
is_nil
(
pman
)
)
this
->
pman
=
rmngr
->
getPOAManager
();
/*
string mname(getName());
mname+="_poamngr";
PortableServer::POA_var root_poa = rmngr->getPOA();
poa = root_poa->create_POA(mname.c_str(), pman, policyList);
*/
PortableServer
::
POA_var
rpoa
=
rmngr
->
getPOA
();
this
->
pman
=
m
->
getPOAManager
();
PortableServer
::
POA_var
rpoa
=
m
->
getPOA
();
if
(
rpoa
!=
poa
)
poa
=
rmngr
->
getPOA
();
poa
=
m
->
getPOA
();
if
(
CORBA
::
is_nil
(
poa
)
)
ucrit
<<
myname
<<
"(initPOA): failed init poa "
<<
endl
;
...
...
@@ -249,7 +253,7 @@ void UniSetManager::managers( OManagerCommand cmd )
switch
(
cmd
)
{
case
initial
:
li
->
initPOA
(
this
);
li
->
initPOA
(
get_mptr
()
);
break
;
case
activ
:
...
...
@@ -311,7 +315,7 @@ void UniSetManager::objects(OManagerCommand cmd)
switch
(
cmd
)
{
case
initial
:
li
->
init
(
this
);
li
->
init
(
get_mptr
()
);
break
;
case
activ
:
...
...
src/ObjectRepository/UniSetObject.cc
View file @
ab0cf843
...
...
@@ -46,7 +46,6 @@ using namespace UniSetTypes;
// ------------------------------------------------------------------------------------------
UniSetObject
::
UniSetObject
()
:
ui
(
UniSetTypes
::
DefaultObjectId
),
mymngr
(
NULL
),
msgpid
(
0
),
reg
(
false
),
active
(
0
),
...
...
@@ -66,7 +65,6 @@ stCountOfQueueFull(0)
// ------------------------------------------------------------------------------------------
UniSetObject
::
UniSetObject
(
ObjectId
id
)
:
ui
(
id
),
mymngr
(
NULL
),
msgpid
(
0
),
reg
(
false
),
active
(
0
),
...
...
@@ -99,7 +97,6 @@ stCountOfQueueFull(0)
UniSetObject
::
UniSetObject
(
const
string
&
name
,
const
string
&
section
)
:
ui
(
UniSetTypes
::
DefaultObjectId
),
mymngr
(
NULL
),
msgpid
(
0
),
reg
(
false
),
active
(
0
),
...
...
@@ -177,7 +174,7 @@ void UniSetObject::init_object()
* \param om - указазтель на менджер управляющий объектом
* \return Возращает \a true если инициализация прошда успешно, и \a false если нет
*/
bool
UniSetObject
::
init
(
UniSetManager
*
om
)
bool
UniSetObject
::
init
(
const
std
::
weak_ptr
<
UniSetManager
>&
om
)
{
uinfo
<<
myname
<<
": init..."
<<
endl
;
this
->
mymngr
=
om
;
...
...
@@ -334,7 +331,8 @@ void UniSetObject::registered()
return
;
}
if
(
!
mymngr
)
auto
m
=
mymngr
.
lock
();
if
(
!
m
)
{
uwarn
<<
myname
<<
"(registered): unknown my manager"
<<
endl
;
string
err
(
myname
+
": unknown my manager"
);
...
...
@@ -370,7 +368,6 @@ void UniSetObject::registered()
(так бы можно было проверить и если "не жив", то смело заменять ссылку на новую). Но существует обратная сторона:
если заменяемый объект "жив" и завершит свою работу, то он может почистить за собой ссылку и это тогда наш(новый)
объект станет недоступен другим, а знать об этом не будет!!!
*/
ucrit
<<
myname
<<
"(registered): replace object (ObjectNameAlready)"
<<
endl
;
reg
=
true
;
...
...
@@ -638,21 +635,26 @@ bool UniSetObject::deactivate()
{
uinfo
<<
myname
<<
"(deactivate): ..."
<<
endl
;
PortableServer
::
POA_var
poamngr
=
mymngr
->
getPOA
();
if
(
!
PortableServer
::
POA_Helper
::
is_nil
(
poamngr
)
)
{
try
{
deactivateObject
();
}
catch
(...){}
auto
m
=
mymngr
.
lock
();
if
(
m
)
{
PortableServer
::
POA_var
poamngr
=
m
->
getPOA
();
if
(
!
PortableServer
::
POA_Helper
::
is_nil
(
poamngr
)
)
{
try
{
deactivateObject
();
}
catch
(...){}
unregister
();
PortableServer
::
ObjectId_var
oid
=
poamngr
->
servant_to_id
(
static_cast
<
PortableServer
::
ServantBase
*>
(
this
));
poamngr
->
deactivate_object
(
oid
);
uinfo
<<
myname
<<
"(disacivate): finished..."
<<
endl
;
return
true
;
}
}
unregister
();
PortableServer
::
ObjectId_var
oid
=
poamngr
->
servant_to_id
(
static_cast
<
PortableServer
::
ServantBase
*>
(
this
));
poamngr
->
deactivate_object
(
oid
);
uinfo
<<
myname
<<
"(disacivate): finished..."
<<
endl
;
return
true
;
}
uwarn
<<
myname
<<
"(deactivate): manager already destroyed.."
<<
endl
;
}
catch
(
CORBA
::
TRANSIENT
)
...
...
@@ -684,13 +686,16 @@ bool UniSetObject::activate()
{
uinfo
<<
myname
<<
": activate..."
<<
endl
;
if
(
mymngr
==
NULL
)
auto
m
=
mymngr
.
lock
();
if
(
!
m
)
{
ucrit
<<
myname
<<
"(activate): mymngr=NULL!!! activate failure..."
<<
endl
;
return
false
;
ostringstream
err
;
err
<<
myname
<<
"(activate): mymngr=NULL!!! activate failure..."
;
ucrit
<<
err
.
str
()
<<
endl
;
throw
SystemError
(
err
.
str
());
}
PortableServer
::
POA_var
poa
=
m
ymngr
->
getPOA
();
PortableServer
::
POA_var
poa
=
m
->
getPOA
();
if
(
poa
==
NULL
||
CORBA
::
is_nil
(
poa
)
)
{
string
err
(
myname
+
": не задан менеджер"
);
...
...
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