[Ace-users] Memory leak in ACE_Sig_Handlers_Set
teromari at luukku.com
teromari at luukku.com
Tue Feb 12 06:42:59 CST 2008
ACE version 5.6.2, Windows XP and VisualStudio 7.1
When application creates a signal handler
CtrlCSignalHandler pCtrlCSignalHandler(SIGINT);
ACE_Sig_Handlers aceSignalHandler;
int intSigKey = aceSignalHandler.register_handler (SIGINT,
&pCtrlCSignalHandler);
runs it
ACE_Reactor::instance ()->run_reactor_event_loop();
and releases it
aceSignalHandler.remove_handler(SIGINT, 0 , 0, intSigKey);
168bytes are not released.
Allocation: In sig_handler.cpp line 318 there is check,
if ACE_Sig_Handlers_Set::sig_handlers_[signum] == 0
When true,
new ACE_NEW_RETURN (ACE_Sig_Handlers_Set::sig_handlers_[signum]...
is created.
Release: In sig_handler.cpp line line 502 there is a check,
if (handler_set->size () == 0)
When true,
new_disp->register_action (signum, old_disp)
sets the line 318 check back to true.
The original allocation was never released.
To my understanding simple fix would be to add
delete handler_set;
line somewhere within check,
if (handler_set->size () == 0)
Is my definition/fix correct?
Thank you,
Tero
More information about the Ace-users
mailing list