fix potential *NULL from Get2PutProxy

This commit is contained in:
Michael Davidsaver
2018-03-08 11:42:56 -05:00
parent 23c2ed3484
commit acab4cd408
+25 -5
View File
@@ -259,19 +259,39 @@ struct Get2PutProxy : public ChannelGet
ChannelPut::shared_pointer op; // the put we wrap
std::tr1::shared_ptr<Get2PutProxy::Req> op_request; // keep our Req alive
ChannelPut::shared_pointer OP() {
epicsGuard<epicsMutex> G(op_request->mutex);
return op;
}
Get2PutProxy() {}
virtual ~Get2PutProxy() {}
virtual void destroy() OVERRIDE FINAL
{ op->destroy(); }
{
ChannelPut::shared_pointer O(OP());
if(O) O->destroy();
}
virtual std::tr1::shared_ptr<Channel> getChannel() OVERRIDE FINAL
{ return op->getChannel(); }
{
ChannelPut::shared_pointer O(OP());
return O ? O->getChannel() : std::tr1::shared_ptr<Channel>();
}
virtual void cancel() OVERRIDE FINAL
{ op->cancel(); }
{
ChannelPut::shared_pointer O(OP());
if(O) O->cancel();
}
virtual void lastRequest() OVERRIDE FINAL
{ op->lastRequest(); }
{
ChannelPut::shared_pointer O(OP());
if(O) O->lastRequest();
}
virtual void get() OVERRIDE FINAL
{ op->get(); }
{
ChannelPut::shared_pointer O(OP());
if(O) O->get();
}
};
}// namespace