From 87bb7d430f02b16c8483e503bd032abbb8317fe4 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Thu, 30 Jan 2025 12:02:49 +0100 Subject: [PATCH] use smart pointers in fdManager --- modules/libcom/src/fdmgr/fdManager.cpp | 9 ++++----- modules/libcom/src/fdmgr/fdManager.h | 12 +++++++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/libcom/src/fdmgr/fdManager.cpp b/modules/libcom/src/fdmgr/fdManager.cpp index 58917b4c7..8b8205f0f 100644 --- a/modules/libcom/src/fdmgr/fdManager.cpp +++ b/modules/libcom/src/fdmgr/fdManager.cpp @@ -56,7 +56,7 @@ struct fdManagerPrivate { tsDLList < fdReg > activeList; resTable < fdReg, fdRegId > fdTbl; const double sleepQuantum; - epicsTimerQueuePassive * pTimerQueue; + epics::auto_ptr pTimerQueue; bool processInProg; #ifdef FDMGR_USE_POLL @@ -81,14 +81,14 @@ struct fdManagerPrivate { fdManagerPrivate::fdManagerPrivate(fdManager & owner) : sleepQuantum(epicsThreadSleepQuantum()), - pTimerQueue(0), processInProg(false), + processInProg(false), pCBReg(0), owner(owner) {} inline void fdManagerPrivate::lazyInitTimerQueue () { - if (!pTimerQueue) { - pTimerQueue = & epicsTimerQueuePassive::create(owner); + if (!pTimerQueue.get()) { + pTimerQueue.reset(&epicsTimerQueuePassive::create(owner)); } } @@ -138,7 +138,6 @@ LIBCOM_API fdManager::~fdManager() pReg->state = fdReg::limbo; pReg->destroy(); } - delete priv->pTimerQueue; osiSockRelease(); } diff --git a/modules/libcom/src/fdmgr/fdManager.h b/modules/libcom/src/fdmgr/fdManager.h index 518539bc4..571dcc7a5 100644 --- a/modules/libcom/src/fdmgr/fdManager.h +++ b/modules/libcom/src/fdmgr/fdManager.h @@ -19,6 +19,16 @@ #ifndef fdManagerH_included #define fdManagerH_included +#include +namespace epics { +#if __cplusplus>=201103L +template +using auto_ptr = std::unique_ptr; +#else +using std::auto_ptr; +#endif +} + #include "libComAPI.h" // reset share lib defines #include "tsDLList.h" #include "resourceLib.h" @@ -87,7 +97,7 @@ public: epicsTimer & createTimer (); private: - struct fdManagerPrivate* priv; + epics::auto_ptr priv; void reschedule (); double quantum ();