aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/base/ebase.cpp52
-rw-r--r--lib/base/ebase.h6
2 files changed, 35 insertions, 23 deletions
diff --git a/lib/base/ebase.cpp b/lib/base/ebase.cpp
index 5bafe732..caccb391 100644
--- a/lib/base/ebase.cpp
+++ b/lib/base/ebase.cpp
@@ -26,8 +26,11 @@ void eSocketNotifier::start()
if (state)
stop();
- context.addSocketNotifier(this);
- state=2; // running but not in poll yet
+ if (eMainloop::isValid(&context))
+ {
+ context.addSocketNotifier(this);
+ state=2; // running but not in poll yet
+ }
}
void eSocketNotifier::stop()
@@ -46,29 +49,35 @@ void eTimer::start(long msek, bool singleShot)
if (bActive)
stop();
- bActive = true;
- bSingleShot = singleShot;
- interval = msek;
- clock_gettime(CLOCK_MONOTONIC, &nextActivation);
-// eDebug("this = %p\nnow sec = %d, nsec = %d\nadd %d msec", this, nextActivation.tv_sec, nextActivation.tv_nsec, msek);
- nextActivation += (msek<0 ? 0 : msek);
-// eDebug("next Activation sec = %d, nsec = %d", nextActivation.tv_sec, nextActivation.tv_nsec );
- context.addTimer(this);
+ if (eMainloop::isValid(&context))
+ {
+ bActive = true;
+ bSingleShot = singleShot;
+ interval = msek;
+ clock_gettime(CLOCK_MONOTONIC, &nextActivation);
+// eDebug("this = %p\nnow sec = %d, nsec = %d\nadd %d msec", this, nextActivation.tv_sec, nextActivation.tv_nsec, msek);
+ nextActivation += (msek<0 ? 0 : msek);
+// eDebug("next Activation sec = %d, nsec = %d", nextActivation.tv_sec, nextActivation.tv_nsec );
+ context.addTimer(this);
+ }
}
-void eTimer::startLongTimer( int seconds )
+void eTimer::startLongTimer(int seconds)
{
if (bActive)
stop();
- bActive = bSingleShot = true;
- interval = 0;
- clock_gettime(CLOCK_MONOTONIC, &nextActivation);
-// eDebug("this = %p\nnow sec = %d, nsec = %d\nadd %d sec", this, nextActivation.tv_sec, nextActivation.tv_nsec, seconds);
- if ( seconds > 0 )
- nextActivation.tv_sec += seconds;
-// eDebug("next Activation sec = %d, nsec = %d", nextActivation.tv_sec, nextActivation.tv_nsec );
- context.addTimer(this);
+ if (eMainloop::isValid(&context))
+ {
+ bActive = bSingleShot = true;
+ interval = 0;
+ clock_gettime(CLOCK_MONOTONIC, &nextActivation);
+// eDebug("this = %p\nnow sec = %d, nsec = %d\nadd %d sec", this, nextActivation.tv_sec, nextActivation.tv_nsec, seconds);
+ if ( seconds > 0 )
+ nextActivation.tv_sec += seconds;
+// eDebug("next Activation sec = %d, nsec = %d", nextActivation.tv_sec, nextActivation.tv_nsec );
+ context.addTimer(this);
+ }
}
void eTimer::stop()
@@ -114,6 +123,11 @@ void eTimer::activate() // Internal Funktion... called from eApplication
// mainloop
ePtrList<eMainloop> eMainloop::existing_loops;
+bool eMainloop::isValid(eMainloop *ml)
+{
+ return std::find(existing_loops.begin(), existing_loops.end(), ml) != existing_loops.end();
+}
+
eMainloop::~eMainloop()
{
existing_loops.remove(this);
diff --git a/lib/base/ebase.h b/lib/base/ebase.h
index c69133f6..f6fc07d3 100644
--- a/lib/base/ebase.h
+++ b/lib/base/ebase.h
@@ -205,11 +205,9 @@ class eMainloop
void removeSocketNotifier(eSocketNotifier *sn);
void addTimer(eTimer* e);
void removeTimer(eTimer* e);
-public:
-#ifndef SWIG
static ePtrList<eMainloop> existing_loops;
-#endif
-
+ static bool isValid(eMainloop *);
+public:
eMainloop()
:app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_idle_count(0), m_inActivate(0), m_interrupt_requested(0)
{