(please make this a SSCCE, if applicable and reasonable)
macchina.io Version
macchina.io-2018.11.06-7c725bf8
Compiler and Version
gcc
Operating System and Version
Windows 10, Android x86_64 and amd64
Other Relevant Information
Proposed solution:
The second pending cancel notification (cancel(true) , which has an _finished event waiting is never set. This needs to be set, before clearing the queue.
namespace Poco { namespace Util {
class TimerNotification: public Poco::Notification { public: virtual void set(); }
class CancelNotification: public TimerNotification { public: bool execute() { ... else if (pNf.cast<CancelNotification>()) { pNf->set(); } } void set() { _finished.set(); } }
Expected Behavior
When a Poco::Util::Timer is Cancelled using Cancel(true) while a Cancel(false) is already in execution state, it hangs forever.
Actual Behavior
Clear all the pending notifications and exit gracefully without hanging.
Steps to Reproduce
Poco::Util::Timer timer1; timer1.cancel(). timer1.cancel(true);
(please make this a SSCCE, if applicable and reasonable)
macchina.io Version
macchina.io-2018.11.06-7c725bf8
Compiler and Version
gcc
Operating System and Version
Windows 10, Android x86_64 and amd64
Other Relevant Information
Proposed solution:
The second pending cancel notification (cancel(true) , which has an
_finished
event waiting is never set. This needs to be set, before clearing the queue.namespace Poco { namespace Util {
class TimerNotification: public Poco::Notification { public: virtual void set(); }
class CancelNotification: public TimerNotification { public: bool execute() { ... else if (pNf.cast<CancelNotification>()) { pNf->set(); } } void set() { _finished.set(); } }
} }