Skip to content

Commit

Permalink
Fix memory error caused by wrong RxCpp observable initialization.
Browse files Browse the repository at this point in the history
  • Loading branch information
geektoni committed Jul 11, 2017
1 parent e3dde55 commit 8ac2b02
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/shogun/base/SGObject.cpp
Expand Up @@ -509,8 +509,8 @@ void CSGObject::init()
m_hash = 0;

m_subject_params = new SGSubject();
*m_observable_params = m_subject_params->get_observable();
*m_subscriber_params = m_subject_params->get_subscriber();
m_observable_params = new SGObservable(m_subject_params->get_observable());
m_subscriber_params = new SGSubscriber(m_subject_params->get_subscriber());
}

void CSGObject::print_modsel_params()
Expand Down
23 changes: 8 additions & 15 deletions src/shogun/lib/Signal.cpp
Expand Up @@ -23,26 +23,15 @@ bool CSignal::m_active = false;
CSignal::SGSubjectS * CSignal::m_subject =
new rxcpp::subjects::subject<int>();

CSignal::SGObservableS * CSignal::m_observable;
CSignal::SGSubscriberS * CSignal::m_subscriber;
CSignal::SGObservableS * CSignal::m_observable = new CSignal::SGObservableS(CSignal::m_subject->get_observable());
CSignal::SGSubscriberS * CSignal::m_subscriber = new CSignal::SGSubscriberS(CSignal::m_subject->get_subscriber());

CSignal::CSignal()
{
// Should prevent memory leak
if (m_observable != NULL || m_subscriber != NULL)
{
delete m_observable;
delete m_subscriber;
}
*(CSignal::m_observable) = m_subject->get_observable();
*(CSignal::m_subscriber) = m_subject->get_subscriber();
}

CSignal::~CSignal()
{
delete m_subject;
delete m_observable;
delete m_subscriber;
}

void CSignal::handler(int signal)
Expand Down Expand Up @@ -91,7 +80,11 @@ void CSignal::handler(int signal)

void CSignal::reset_handler()
{
delete m_subject;
delete m_observable;
delete m_subscriber;

m_subject = new rxcpp::subjects::subject<int>();
*m_observable = m_subject->get_observable();
*m_subscriber = m_subject->get_subscriber();
m_observable = new CSignal::SGObservableS(m_subject->get_observable());
m_subscriber = new CSignal::SGSubscriberS(m_subject->get_subscriber());
}

0 comments on commit 8ac2b02

Please sign in to comment.