summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/thread')
-rw-r--r--src/corelib/thread/qthread.cpp7
-rw-r--r--src/corelib/thread/qthread_p.h1
-rw-r--r--src/corelib/thread/qthread_unix.cpp27
-rw-r--r--src/corelib/thread/qthread_win.cpp32
4 files changed, 19 insertions, 48 deletions
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index 17b0f2cb94..1df768c1ed 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -152,13 +152,6 @@ QAdoptedThread::~QAdoptedThread()
// fprintf(stderr, "~QAdoptedThread = %p\n", this);
}
-QThread *QAdoptedThread::createThreadForAdoption()
-{
- QScopedPointer<QThread> t(new QAdoptedThread(0));
- t->moveToThread(t.data());
- return t.take();
-}
-
void QAdoptedThread::run()
{
// this function should never be called
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index 66dd8db7c7..bbaf664a2d 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -248,7 +248,6 @@ public:
~QAdoptedThread();
void init();
- static QThread *createThreadForAdoption();
private:
void run();
};
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 8c6fefcfd7..6deae261c6 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -199,28 +199,17 @@ QThreadData *QThreadData::current()
{
QThreadData *data = get_thread_data();
if (!data) {
- void *a;
- if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, &a)) {
- QThread *adopted = static_cast<QThread*>(a);
- Q_ASSERT(adopted);
- data = QThreadData::get2(adopted);
+ data = new QThreadData;
+ QT_TRY {
set_thread_data(data);
- adopted->d_func()->running = true;
- adopted->d_func()->finished = false;
- static_cast<QAdoptedThread *>(adopted)->init();
- } else {
- data = new QThreadData;
- QT_TRY {
- set_thread_data(data);
- data->thread = new QAdoptedThread(data);
- } QT_CATCH(...) {
- clear_thread_data();
- data->deref();
- data = 0;
- QT_RETHROW;
- }
+ data->thread = new QAdoptedThread(data);
+ } QT_CATCH(...) {
+ clear_thread_data();
data->deref();
+ data = 0;
+ QT_RETHROW;
}
+ data->deref();
data->isAdopted = true;
data->threadId = (Qt::HANDLE)pthread_self();
if (!QCoreApplicationPrivate::theMainThread)
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index 5b74bad7ef..0c834cfff2 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -101,29 +101,19 @@ QThreadData *QThreadData::current()
qt_create_tls();
QThreadData *threadData = reinterpret_cast<QThreadData *>(TlsGetValue(qt_current_thread_data_tls_index));
if (!threadData) {
- QThread *adopted = 0;
- if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, (void **) &adopted)) {
- Q_ASSERT(adopted);
- threadData = QThreadData::get2(adopted);
- TlsSetValue(qt_current_thread_data_tls_index, threadData);
- adopted->d_func()->running = true;
- adopted->d_func()->finished = false;
- static_cast<QAdoptedThread *>(adopted)->init();
- } else {
- threadData = new QThreadData;
- // This needs to be called prior to new AdoptedThread() to
- // avoid recursion.
- TlsSetValue(qt_current_thread_data_tls_index, threadData);
- QT_TRY {
- threadData->thread = new QAdoptedThread(threadData);
- } QT_CATCH(...) {
- TlsSetValue(qt_current_thread_data_tls_index, 0);
- threadData->deref();
- threadData = 0;
- QT_RETHROW;
- }
+ threadData = new QThreadData;
+ // This needs to be called prior to new AdoptedThread() to
+ // avoid recursion.
+ TlsSetValue(qt_current_thread_data_tls_index, threadData);
+ QT_TRY {
+ threadData->thread = new QAdoptedThread(threadData);
+ } QT_CATCH(...) {
+ TlsSetValue(qt_current_thread_data_tls_index, 0);
threadData->deref();
+ threadData = 0;
+ QT_RETHROW;
}
+ threadData->deref();
threadData->isAdopted = true;
threadData->threadId = (Qt::HANDLE)GetCurrentThreadId();