Two small things in the same area.
One periodic timer is never cancelled on detach. mod.dronescan/dronescan.cc's OnDetach() cancels tidClearJoinCounter, tidClearNickCounter and tidClearActiveList (1118-1120), tidRepeatGC (1162), tidSecondSpyCheck (1166) and tidSpyJoinRetry (1167) — but never tidGlineQueue. Masked by removeAllTimers() on unregister, so it is an inconsistency rather than a leak today.
The timer ids start uninitialised. None of the seven members at mod.dronescan/dronescan.h:887-904 has an initialiser:
xServer::timerID tidClearActiveList;
xServer::timerID tidClearJoinCounter;
xServer::timerID tidClearNickCounter;
xServer::timerID tidGlineQueue;
xServer::timerID tidRepeatGC;
xServer::timerID tidSecondSpyCheck;
xServer::timerID tidSpyJoinRetry;
This is latent only, because OnAttach() assigns all seven before any of them can fire. It becomes real the moment a cancel path runs before OnAttach() — an early error return, or a new caller added later — since an indeterminate id would then be passed to UnRegisterTimer(). Initialising them to 0 costs nothing.
Two small things in the same area.
One periodic timer is never cancelled on detach.
mod.dronescan/dronescan.cc'sOnDetach()cancelstidClearJoinCounter,tidClearNickCounterandtidClearActiveList(1118-1120),tidRepeatGC(1162),tidSecondSpyCheck(1166) andtidSpyJoinRetry(1167) — but nevertidGlineQueue. Masked byremoveAllTimers()on unregister, so it is an inconsistency rather than a leak today.The timer ids start uninitialised. None of the seven members at
mod.dronescan/dronescan.h:887-904has an initialiser:This is latent only, because
OnAttach()assigns all seven before any of them can fire. It becomes real the moment a cancel path runs beforeOnAttach()— an early error return, or a new caller added later — since an indeterminate id would then be passed toUnRegisterTimer(). Initialising them to 0 costs nothing.