Merge pull request #7129 from Elias481/fix/logrotate-segfaults-6737

avoid incrementing Ptr which could be already be in destruction-phase
This commit is contained in:
Michael Friedrich 2019-04-24 11:45:16 +02:00 committed by GitHub
commit ccbe9f7fbe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 6 deletions

View File

@ -110,7 +110,7 @@ void Timer::UninitializeThread()
void Timer::Call()
{
try {
OnTimerExpired(Timer::Ptr(this));
OnTimerExpired(this);
} catch (...) {
InternalReschedule(true);
@ -301,8 +301,6 @@ void Timer::TimerThreadProc()
continue;
}
Timer::Ptr ptimer = timer;
/* Remove the timer from the list so it doesn't get called again
* until the current call is completed. */
l_Timers.erase(timer);
@ -312,6 +310,6 @@ void Timer::TimerThreadProc()
lock.unlock();
/* Asynchronously call the timer. */
Utility::QueueAsyncCallback(std::bind(&Timer::Call, ptimer));
Utility::QueueAsyncCallback(std::bind(&Timer::Call, timer));
}
}

View File

@ -39,7 +39,7 @@ public:
void Reschedule(double next = -1);
double GetNext() const;
boost::signals2::signal<void(const Timer::Ptr&)> OnTimerExpired;
boost::signals2::signal<void(const Timer * const&)> OnTimerExpired;
private:
double m_Interval{0}; /**< The interval of the timer. */

View File

@ -24,7 +24,7 @@ BOOST_AUTO_TEST_CASE(interval)
int counter = 0;
static void Callback(const Timer::Ptr&)
static void Callback(const Timer * const&)
{
counter++;
}