git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'bug_258_sorting_of_configsatlist'
[enigma2.git]
/
lib
/
base
/
thread.cpp
diff --git
a/lib/base/thread.cpp
b/lib/base/thread.cpp
index 58c4fd72619a1064f2971fe265a0f41d3df8c5b7..fa923debe3ddf08aed24ec059b663a1b7486e071 100644
(file)
--- a/
lib/base/thread.cpp
+++ b/
lib/base/thread.cpp
@@
-9,12
+9,9
@@
void eThread::thread_completed(void *ptr)
eThread *p = (eThread*) ptr;
p->m_alive = 0;
eThread *p = (eThread*) ptr;
p->m_alive = 0;
- /* recover state */
- if (!p->m_state.value())
- {
- p->m_state.up();
- ASSERT(p->m_state.value() == 1);
- }
+ /* recover state in case thread was cancelled before calling hasStarted */
+ if (!p->m_started)
+ p->hasStarted();
p->thread_finished();
}
p->thread_finished();
}
@@
-48,6
+45,7
@@
int eThread::runAsync(int prio, int policy)
ASSERT(m_state.value() == 0);
m_alive = 1;
ASSERT(m_state.value() == 0);
m_alive = 1;
+ m_started = 0;
/* start thread. */
pthread_attr_t attr;
/* start thread. */
pthread_attr_t attr;
@@
-125,5
+123,6
@@
void eThread::kill(bool sendcancel)
void eThread::hasStarted()
{
ASSERT(!m_state.value());
void eThread::hasStarted()
{
ASSERT(!m_state.value());
+ m_started = 1;
m_state.up();
}
m_state.up();
}