SVN commit 547154 by illissius: remove the custom thread id stuff, in favor of Qt4's version some other stuff M +1 -1 collectiondb.cpp M +11 -3 playlistloader.cpp M +3 -3 statusbar/statusBarBase.cpp M +3 -34 threadweaver.cpp M +3 -27 threadweaver.h --- branches/work/kde4/extragear/multimedia/amarok/src/collectiondb.cpp #547153:547154 @@ -3560,7 +3560,7 @@ connectionMutex->lock(); DbConnection *dbConn; - QThread *currThread = ThreadWeaver::Thread::getRunning(); + QThread *currThread = QThread::currentThread(); if (threadConnections->contains(currThread)) { --- branches/work/kde4/extragear/multimedia/amarok/src/playlistloader.cpp #547153:547154 @@ -80,6 +80,8 @@ { DEBUG_BLOCK + debug() << "construct!" << endl; + connect( this, SIGNAL( queueChanged( const PLItemList &, const PLItemList & ) ), Playlist::instance(), SIGNAL( queueChanged( const PLItemList &, const PLItemList & ) ) ); @@ -138,6 +140,7 @@ UrlLoader::~UrlLoader() { + debug() << "destruct!" << endl; Playlist::instance()->unlock(); delete m_markerListViewItem; @@ -147,6 +150,7 @@ bool UrlLoader::doJob() { + debug() << "doJob!" << endl; setProgressTotalSteps( m_URLs.count() ); KUrl::List urls; @@ -162,6 +166,10 @@ loadXml( url ); break; + case PlaylistFile::NotPlaylist: + (EngineController::canDecode( url ) ? urls : m_badURLs) += url; + break; + default: { PlaylistFile playlist( url.path() ); @@ -171,9 +179,6 @@ m_badURLs += url; } break; - - case PlaylistFile::NotPlaylist: - (EngineController::canDecode( url ) ? urls : m_badURLs) += url; } if( urls.count() == OPTIMUM_BUNDLE_COUNT || ( it + 1 ) == end ) { @@ -188,6 +193,7 @@ void UrlLoader::customEvent( QCustomEvent *e) { + debug() << "customEvent!" << endl; bool atfEnabled = AmarokConfig::advancedTagFeatures(); #define e static_cast(e) switch( e->type() ) { @@ -254,6 +260,7 @@ default: DependentJob::customEvent( e ); + warning() << "strange custom event!" << endl; return; } #undef e @@ -262,6 +269,7 @@ void UrlLoader::completeJob() { + debug() << "completeJob!" << endl; const PLItemList &newQueue = Playlist::instance()->m_nextTracks; Q3PtrListIterator it( newQueue ); PLItemList added; --- branches/work/kde4/extragear/multimedia/amarok/src/statusbar/statusBarBase.cpp #547153:547154 @@ -68,14 +68,14 @@ { static void startTimer( int timeout, QObject *receiver, const char *slot ) { - /*QTimer *timer = dynamic_cast( receiver->child( slot ) ); + QTimer *timer = dynamic_cast( receiver->child( slot ) ); if( !timer ) { timer = new QTimer( receiver ); timer->setObjectName( slot ); receiver->connect( timer, SIGNAL(timeout()), slot ); } - timer->start( timeout, true );*/ + timer->start( timeout, true ); } static inline bool isActive( QObject *parent, const char *slot ) @@ -370,7 +370,7 @@ m_popupProgress->reposition(); -// connect( owner, SIGNAL(destroyed( QObject* )), SLOT(endProgressOperation( QObject* )) ); + connect( owner, SIGNAL(destroyed( QObject* )), SLOT(endProgressOperation( QObject* )), Qt::DirectConnection ); // so we can show the correct progress information // after the ProgressBar is setup --- branches/work/kde4/extragear/multimedia/amarok/src/threadweaver.cpp #547153:547154 @@ -24,9 +24,6 @@ using amaroK::StatusBar; -volatile uint ThreadWeaver::threadIdCounter = 1; //main thread grabs zero -QMutex* ThreadWeaver::threadIdMutex = new QMutex(); - ThreadWeaver::ThreadWeaver() { startTimer( 5 * 60 * 1000 ); // prunes the thread pool every 5 minutes @@ -212,11 +209,6 @@ } -//Taken from Qt 4 src/corelib/thread/qthread_unix.cpp -static pthread_once_t current_thread_key_once = PTHREAD_ONCE_INIT; -static pthread_key_t current_thread_key; -static void create_current_thread_key() -{ debug() << "Creating pthread key, exit value is " << pthread_key_create(¤t_thread_key, NULL) << endl; } /// @class ThreadWeaver::Thread ThreadWeaver::Thread::Thread() @@ -229,37 +221,19 @@ Q_ASSERT( isFinished() ); } -QThread* -ThreadWeaver::Thread::getRunning() -{ - pthread_once( ¤t_thread_key_once, create_current_thread_key ); - return reinterpret_cast( pthread_getspecific( current_thread_key ) ); -} - -QString -ThreadWeaver::Thread::threadId() -{ - if( !getRunning() ) - return "None"; - else - { - QString s; - return s.sprintf( "%p", getRunning() ); - } -} - void ThreadWeaver::Thread::runJob( Job *job ) { job->m_thread = this; - job->m_parentThreadId = m_threadId; if ( job->isAborted() ) QApplication::postEvent( ThreadWeaver::instance(), job ); else { m_job = job; - start( Thread::IdlePriority ); //will wait() first if necessary + if( isRunning() ) + wait(); + start( Thread::IdlePriority ); QApplication::postEvent( ThreadWeaver::instance(), @@ -278,11 +252,6 @@ if ( AmarokConfig::databaseEngine().toInt() == DbConnection::sqlite ) CollectionDB::instance()->releasePreviousConnection(this); - //register this thread so that it can be returned in a static getRunning() function - m_threadId = ThreadWeaver::getNewThreadId(); - pthread_once(¤t_thread_key_once, create_current_thread_key); - pthread_setspecific(current_thread_key, this); - m_job->m_aborted |= !m_job->doJob(); if( m_job ) --- branches/work/kde4/extragear/multimedia/amarok/src/threadweaver.h #547153:547154 @@ -101,10 +101,6 @@ static ThreadWeaver *instance(); static void deleteInstance(); - static volatile uint getNewThreadId(); - static QMutex *threadIdMutex; - static volatile uint threadIdCounter; - /** * If the ThreadWeaver is already handling a job of this type then the job * will be queued, otherwise the job will be processed immediately. Allocate @@ -195,15 +191,9 @@ Job *job() const { return m_job; } - static QThread* getRunning(); - static QString threadId(); - const uint localThreadId() const { return m_threadId; } - private: Job *m_job; - uint m_threadId; - //private so I don't break something in the distant future ~Thread(); @@ -308,8 +298,6 @@ */ //void setVisible( bool ); - uint parentThreadId() { return m_parentThreadId; } - protected: /** * Executed inside the thread, this should be reimplemented to do the @@ -336,8 +324,6 @@ uint m_percentDone; uint m_progressDone; uint m_totalSteps; - uint m_parentThreadId; - QString m_description; QString m_status; @@ -397,11 +383,11 @@ }; //useful debug thingy -#define DEBUG_THREAD_FUNC_INFO kDebug() << Debug::indent() << k_funcinfo << "thread: " << ThreadWeaver::Thread::threadId() << endl; +#define DEBUG_THREAD_FUNC_INFO kDebug() << Debug::indent() << k_funcinfo << "thread: " << long( QThread::currentThread() ) << endl; -#define SHOULD_BE_GUI if( ThreadWeaver::Thread::getRunning() ) std::cout \ +#define SHOULD_BE_GUI if( QThread::currentThread() != QCoreApplication::instance()->thread() ) std::cout \ << "Should not be Threaded, but is running in" << \ - long(ThreadWeaver::Thread::getRunning()) <lock(); - temp = threadIdCounter++; - threadIdMutex->unlock(); - return temp; -} - #endif