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:
@@ -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(){}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user