PVA client ref. loop breaking

Adjust ownership of BaseRequestImpl sub-classes.
Keep two weak_ptr<>.
one (internal) for tracking relations with Channel.
one (external) for tracking relations w/ user code, and send Q.

external wraps internal, and calls destroy() to break
ref. loops involving internal.

death to m_thisPointer!
This commit is contained in:
Michael Davidsaver
2017-06-07 13:33:10 +02:00
parent 0334483297
commit 8febd176bb
4 changed files with 386 additions and 396 deletions
+1 -1
View File
@@ -54,7 +54,7 @@ class epicsShareClass MonitorElement {
* This is used by pvAccess to implement monitors.
* @author mrk
*/
class epicsShareClass Monitor : public epics::pvData::Destroyable{
class epicsShareClass Monitor : public virtual epics::pvData::Destroyable{
public:
POINTER_DEFINITIONS(Monitor);
virtual ~Monitor(){}
+1 -1
View File
@@ -138,7 +138,7 @@ struct epicsShareClass ChannelBaseRequester : virtual public epics::pvData::Requ
/**
* Base interface for all channel requests (aka. Operations).
*/
class epicsShareClass ChannelRequest : public epics::pvData::Destroyable, public Lockable, private epics::pvData::NoDefaultMethods {
class epicsShareClass ChannelRequest : public virtual epics::pvData::Destroyable, public Lockable, private epics::pvData::NoDefaultMethods {
public:
POINTER_DEFINITIONS(ChannelRequest);
File diff suppressed because it is too large Load Diff