diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel/qapplication.cpp | 40 | ||||
| -rw-r--r-- | src/kernel/qobject.cpp | 15 | ||||
| -rw-r--r-- | src/tools/qglist.cpp | 355 | ||||
| -rw-r--r-- | src/tools/qglist.h | 8 | 
4 files changed, 372 insertions, 46 deletions
| diff --git a/src/kernel/qapplication.cpp b/src/kernel/qapplication.cpp index 0ec4904..960db1e 100644 --- a/src/kernel/qapplication.cpp +++ b/src/kernel/qapplication.cpp @@ -546,8 +546,9 @@ static QPostEventList *globalPostedEvents = 0;	// list of posted events  uint qGlobalPostedEventsCount()  { -    if (!globalPostedEvents) +    if (!globalPostedEvents) {  	return 0; +    }      return globalPostedEvents->count();  } @@ -2315,8 +2316,9 @@ void QApplication::aboutQt()  bool QApplication::notify( QObject *receiver, QEvent *e )  {      // no events are delivered after ~QApplication() has started -    if ( is_app_closing ) +    if ( is_app_closing ) {  	return FALSE; +    }      if ( receiver == 0 ) {			// serious error  #if defined(QT_CHECK_NULL) @@ -2358,8 +2360,9 @@ bool QApplication::notify( QObject *receiver, QEvent *e )      }      bool res = FALSE; -    if ( !receiver->isWidgetType() ) +    if ( !receiver->isWidgetType() ) {  	res = internalNotify( receiver, e ); +    }      else switch ( e->type() ) {  #ifndef QT_NO_ACCEL      case QEvent::Accel: @@ -2367,13 +2370,15 @@ bool QApplication::notify( QObject *receiver, QEvent *e )  	    QKeyEvent* key = (QKeyEvent*) e;  	    res = internalNotify( receiver, e ); -	    if ( !res && !key->isAccepted() ) +	    if ( !res && !key->isAccepted() ) {  		res = qt_dispatchAccelEvent( (QWidget*)receiver, key ); +	    }  	    // next lines are for compatibility with Qt <= 3.0.x: old  	    // QAccel was listening on toplevel widgets -	    if ( !res && !key->isAccepted() && !((QWidget*)receiver)->isTopLevel() ) +	    if ( !res && !key->isAccepted() && !((QWidget*)receiver)->isTopLevel() ) {  		res = internalNotify( ((QWidget*)receiver)->topLevelWidget(), e ); +	    }  	}      break;  #endif //QT_NO_ACCEL @@ -3116,8 +3121,9 @@ void QApplication::postEvent( QObject *receiver, QEvent *event )  	qapp_cleanup_events.set( &globalPostedEvents );      } -    if ( !receiver->postedEvents ) +    if ( !receiver->postedEvents ) {  	receiver->postedEvents = new QPostEventList; +    }      QPostEventList * l = receiver->postedEvents;      // if this is one of the compressible events, do compression @@ -3232,22 +3238,25 @@ void QApplication::sendPostedEvents( QObject *receiver, int event_type )  {      // Make sure the object hierarchy is stable before processing events      // to avoid endless loops -    if ( receiver == 0 && event_type == 0 ) +    if ( receiver == 0 && event_type == 0 ) {  	sendPostedEvents( 0, QEvent::ChildInserted ); - -    if ( !globalPostedEvents || ( receiver && !receiver->postedEvents ) ) -	return; +    }  #ifdef QT_THREAD_SUPPORT      QMutexLocker locker( postevent_mutex );  #endif +    if ( !globalPostedEvents || ( receiver && !receiver->postedEvents ) ) { +	return; +    } +      bool sent = TRUE;      while ( sent ) {  	sent = FALSE; -	if ( !globalPostedEvents || ( receiver && !receiver->postedEvents ) ) +	if ( !globalPostedEvents || ( receiver && !receiver->postedEvents ) ) {  	    return; +	}  	// if we have a receiver, use the local list. Otherwise, use the  	// global list @@ -3296,8 +3305,9 @@ void QApplication::sendPostedEvents( QObject *receiver, int event_type )  		if ( e->type() == QEvent::Paint && r->isWidgetType() ) {  		    QWidget * w = (QWidget*)r;  		    QPaintEvent * p = (QPaintEvent*)e; -		    if ( w->isVisible() ) +		    if ( w->isVisible() ) {  			w->repaint( p->reg, p->erase ); +		    }  		} else {  		    sent = TRUE;  		    QApplication::sendEvent( r, e ); @@ -3318,10 +3328,12 @@ void QApplication::sendPostedEvents( QObject *receiver, int event_type )  	if ( l == globalPostedEvents ) {  	    globalPostedEvents->first();  	    while( (pe=globalPostedEvents->current()) != 0 ) { -		if ( pe->event ) +		if ( pe->event ) {  		    globalPostedEvents->next(); -		else +		} +		else {  		    globalPostedEvents->remove(); +		}  	    }  	}      } diff --git a/src/kernel/qobject.cpp b/src/kernel/qobject.cpp index 7790676..375e83b 100644 --- a/src/kernel/qobject.cpp +++ b/src/kernel/qobject.cpp @@ -471,11 +471,13 @@ QObject::~QObject()      blockSig = 0; // unblock signals to keep QGuardedPtr happy      emit destroyed( this );      emit destroyed(); -    if ( objname ) +    if ( objname ) {  	delete [] (char*)objname; +    }      objname = 0; -    if ( pendTimer )				// might be pending timers +    if ( pendTimer ) {				// might be pending timers  	qKillTimer( this ); +    }      QApplication::removePostedEvents( this );      if ( isTree ) {  	remove_tree( this );		// remove from global root list @@ -755,12 +757,17 @@ QObject* QObject::child( const char *objName, const char *inheritsClass,  bool QObject::event( QEvent *e )  {  #if defined(QT_CHECK_NULL) -    if ( e == 0 ) +    if ( e == 0 ) {  	qWarning( "QObject::event: Null events are not permitted" ); +    }  #endif +    if ( wasDeleted ) { +	return TRUE; +    }      if ( eventFilters ) {			// try filters -	if ( activate_filters(e) )		// stopped by a filter +	if ( activate_filters(e) ) {		// stopped by a filter  	    return TRUE; +	}      }      switch ( e->type() ) { diff --git a/src/tools/qglist.cpp b/src/tools/qglist.cpp index b04ac75..fb94427 100644 --- a/src/tools/qglist.cpp +++ b/src/tools/qglist.cpp @@ -43,6 +43,10 @@  #include "qdatastream.h"  #include "qvaluelist.h" +#if defined(QT_THREAD_SUPPORT) +  #include "qmutex.h" +#endif // defined(QT_THREAD_SUPPORT) +  /*!    \class QLNode qglist.h    \reentrant @@ -221,6 +225,9 @@ QDataStream &QGList::write( QDataStream &s, QPtrCollection::Item ) const  QGList::QGList()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex = new QMutex(true); +#endif      firstNode = lastNode = curNode = 0;		// initialize list      numNodes  = 0;      curIndex  = -1; @@ -234,6 +241,9 @@ QGList::QGList()  QGList::QGList( const QGList & list )      : QPtrCollection( list )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex = new QMutex(true); +#endif      firstNode = lastNode = curNode = 0;		// initialize list      numNodes  = 0;      curIndex  = -1; @@ -258,6 +268,9 @@ QGList::~QGList()      // twice on the same address! This is insane but let's try not to crash      // here.      iterators = 0; +#if defined(QT_THREAD_SUPPORT) +    //delete mutex; +#endif  } @@ -290,11 +303,13 @@ QGList& QGList::operator=( const QGList &list )  bool QGList::operator==( const QGList &list ) const  { -    if ( count() != list.count() ) +    if ( count() != list.count() ) {  	return FALSE; +    } -    if ( count() == 0 ) +    if ( count() == 0 ) {  	return TRUE; +    }      QLNode *n1 = firstNode;      QLNode *n2 = list.firstNode; @@ -322,8 +337,15 @@ bool QGList::operator==( const QGList &list ) const  QLNode *QGList::locate( uint index )  { -    if ( index == (uint)curIndex )		// current node ? +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( index == (uint)curIndex ) {		// current node ? +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return curNode; +    }      if ( !curNode && firstNode ) {		// set current node  	curNode	 = firstNode;  	curIndex = 0; @@ -332,13 +354,18 @@ QLNode *QGList::locate( uint index )      int	 distance = index - curIndex;		// node distance to cur node      bool forward;				// direction to traverse -    if ( index >= numNodes ) +    if ( index >= numNodes ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return 0; +    } -    if ( distance < 0 ) +    if ( distance < 0 ) {  	distance = -distance; +    }      if ( (uint)distance < index && (uint)distance < numNodes - index ) { -	node =	curNode;			// start from current node +	node = curNode;				// start from current node  	forward = index > (uint)curIndex;      } else if ( index < numNodes - index ) {	// start from first node  	node = firstNode; @@ -352,13 +379,18 @@ QLNode *QGList::locate( uint index )  	forward = FALSE;      }      if ( forward ) {				// now run through nodes -	while ( distance-- ) +	while ( distance-- ) {  	    node = node->next; +	}      } else { -	while ( distance-- ) +	while ( distance-- ) {  	    node = node->prev; +	}      }      curIndex = index;				// must update index +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return curNode = node;  } @@ -369,6 +401,9 @@ QLNode *QGList::locate( uint index )  void QGList::inSort( QPtrCollection::Item d )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      int index = 0;      register QLNode *n = firstNode;      while ( n && compareItems(n->data,d) < 0 ){ // find position in list @@ -376,6 +411,9 @@ void QGList::inSort( QPtrCollection::Item d )  	index++;      }      insertAt( index, d ); +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -385,6 +423,9 @@ void QGList::inSort( QPtrCollection::Item d )  void QGList::prepend( QPtrCollection::Item d )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n = new QLNode( newItem(d) );      Q_CHECK_PTR( n );      n->prev = 0; @@ -395,6 +436,9 @@ void QGList::prepend( QPtrCollection::Item d )      firstNode = curNode = n;			// curNode affected      numNodes++;      curIndex = 0; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -404,16 +448,24 @@ void QGList::prepend( QPtrCollection::Item d )  void QGList::append( QPtrCollection::Item d )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n = new QLNode( newItem(d) );      Q_CHECK_PTR( n );      n->next = 0; -    if ( (n->prev = lastNode) )			// list is not empty +    if ( (n->prev = lastNode) ) {		// list is not empty  	lastNode->next = n; -    else					// initialize list +    } +    else {					// initialize list  	firstNode = n; +    }      lastNode = curNode = n;			// curNode affected      curIndex = numNodes;      numNodes++; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -423,25 +475,43 @@ void QGList::append( QPtrCollection::Item d )  bool QGList::insertAt( uint index, QPtrCollection::Item d )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      if ( index == 0 ) {  	prepend( d ); +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return TRUE; -    } else if ( index == numNodes ) { +    } +    else if ( index == numNodes ) {  	append( d ); +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return TRUE;      }      QLNode *nextNode = locate( index ); -    if ( !nextNode ) +    if ( !nextNode ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      QLNode *prevNode = nextNode->prev;      register QLNode *n = new QLNode( newItem(d) );      Q_CHECK_PTR( n );      nextNode->prev = n; +    Q_ASSERT( (!((curIndex > 0) && (!prevNode))) );      prevNode->next = n;      n->prev = prevNode;				// link new node into list      n->next = nextNode;      curNode = n;				// curIndex set by locate()      numNodes++; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -452,18 +522,30 @@ bool QGList::insertAt( uint index, QPtrCollection::Item d )  void QGList::relinkNode( QLNode *n )  { -    if ( n == firstNode )			// already first +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( n == firstNode ) {			// already first +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return; +    }      curNode = n;      unlink();      n->prev = 0; -    if ( (n->next = firstNode) )		// list is not empty +    if ( (n->next = firstNode) ) {		// list is not empty  	firstNode->prev = n; -    else					// initialize list +    } +    else {					// initialize list  	lastNode = n; +    }      firstNode = curNode = n;			// curNode affected      numNodes++;      curIndex = 0; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -473,8 +555,15 @@ void QGList::relinkNode( QLNode *n )  QLNode *QGList::unlink()  { -    if ( curNode == 0 )				// null current node +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( curNode == 0 ) {			// null current node +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return 0; +    }      register QLNode *n = curNode;		// unlink this node      if ( n == firstNode ) {			// removing first node ?  	if ( (firstNode = n->next) ) { @@ -500,9 +589,13 @@ QLNode *QGList::unlink()          curIndex--;      } -    if ( iterators ) +    if ( iterators ) {  	iterators->notifyRemove( n, curNode ); +    }      numNodes--; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return n;  } @@ -513,6 +606,9 @@ QLNode *QGList::unlink()  bool QGList::removeNode( QLNode *n )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif  #if defined(QT_CHECK_NULL)      if ( n == 0 || (n->prev && n->prev->next != n) ||  	 (n->next && n->next->prev != n) ) { @@ -526,6 +622,9 @@ bool QGList::removeNode( QLNode *n )      delete n;      curNode  = firstNode;      curIndex = curNode ? 0 : -1; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -537,13 +636,27 @@ bool QGList::removeNode( QLNode *n )  bool QGList::remove( QPtrCollection::Item d )  { -    if ( d && find(d) == -1 ) +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( d && find(d) == -1 ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      QLNode *n = unlink(); -    if ( !n ) +    if ( !n ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      deleteItem( n->data );      delete n; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -553,13 +666,27 @@ bool QGList::remove( QPtrCollection::Item d )  bool QGList::removeRef( QPtrCollection::Item d )  { -    if ( findRef(d) == -1 ) +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( findRef(d) == -1 ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      QLNode *n = unlink(); -    if ( !n ) +    if ( !n ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      deleteItem( n->data );      delete n; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -581,13 +708,27 @@ bool QGList::removeRef( QPtrCollection::Item d )  bool QGList::removeAt( uint index )  { -    if ( !locate(index) ) +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( !locate(index) ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      QLNode *n = unlink(); -    if ( !n ) +    if ( !n ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      deleteItem( n->data );      delete n; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -597,13 +738,23 @@ bool QGList::removeAt( uint index )  */  bool QGList::replaceAt( uint index, QPtrCollection::Item d )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      QLNode *n = locate( index ); -    if ( !n ) +    if ( !n ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return FALSE; +    }      if ( n->data != d ) {  	deleteItem( n->data );  	n->data = newItem( d );      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return TRUE;  } @@ -615,10 +766,16 @@ bool QGList::replaceAt( uint index, QPtrCollection::Item d )  QPtrCollection::Item QGList::takeNode( QLNode *n )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif  #if defined(QT_CHECK_NULL)      if ( n == 0 || (n->prev && n->prev->next != n) ||  	 (n->next && n->next->prev != n) ) {  	qWarning( "QGList::takeNode: Corrupted node" ); +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return 0;      }  #endif @@ -628,6 +785,9 @@ QPtrCollection::Item QGList::takeNode( QLNode *n )      delete n;					// delete the node, not data      curNode  = firstNode;      curIndex = curNode ? 0 : -1; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return d;  } @@ -637,9 +797,15 @@ QPtrCollection::Item QGList::takeNode( QLNode *n )  QPtrCollection::Item QGList::take()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      QLNode *n = unlink();			// unlink node      Item d = n ? n->data : 0;      delete n;					// delete node, keep contents +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return d;  } @@ -649,11 +815,21 @@ QPtrCollection::Item QGList::take()  QPtrCollection::Item QGList::takeAt( uint index )  { -    if ( !locate(index) ) +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif +    if ( !locate(index) ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return 0; +    }      QLNode *n = unlink();			// unlink node      Item d = n ? n->data : 0;      delete n;					// delete node, keep contents +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return d;  } @@ -663,10 +839,16 @@ QPtrCollection::Item QGList::takeAt( uint index )  QPtrCollection::Item QGList::takeFirst()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      first();      QLNode *n = unlink();			// unlink node      Item d = n ? n->data : 0;      delete n; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return d;  } @@ -676,10 +858,16 @@ QPtrCollection::Item QGList::takeFirst()  QPtrCollection::Item QGList::takeLast()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      last();      QLNode *n = unlink();			// unlink node      Item d = n ? n->data : 0;      delete n; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return d;  } @@ -690,14 +878,18 @@ QPtrCollection::Item QGList::takeLast()  void QGList::clear()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n = firstNode;      firstNode = lastNode = curNode = 0;		// initialize list      numNodes = 0;      curIndex = -1; -    if ( iterators ) +    if ( iterators ) {  	iterators->notifyClear( FALSE ); +    }      QLNode *prevNode;      while ( n ) {				// for all nodes ... @@ -706,6 +898,9 @@ void QGList::clear()  	n = n->next;  	delete prevNode;			// deallocate node      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -716,6 +911,9 @@ void QGList::clear()  int QGList::findRef( QPtrCollection::Item d, bool fromStart )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n;      int	     index;      if ( fromStart ) {				// start from first node @@ -731,6 +929,9 @@ int QGList::findRef( QPtrCollection::Item d, bool fromStart )      }      curNode = n;      curIndex = n ? index : -1; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return curIndex;				// return position of item  } @@ -742,6 +943,9 @@ int QGList::findRef( QPtrCollection::Item d, bool fromStart )  int QGList::find( QPtrCollection::Item d, bool fromStart )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n;      int	     index;      if ( fromStart ) {				// start from first node @@ -757,6 +961,9 @@ int QGList::find( QPtrCollection::Item d, bool fromStart )      }      curNode = n;      curIndex = n ? index : -1; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return curIndex;				// return position of item  } @@ -767,6 +974,9 @@ int QGList::find( QPtrCollection::Item d, bool fromStart )  uint QGList::containsRef( QPtrCollection::Item d ) const  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n = firstNode;      uint     count = 0;      while ( n ) {				// for all nodes... @@ -774,6 +984,9 @@ uint QGList::containsRef( QPtrCollection::Item d ) const  	    count++;  	n = n->next;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return count;  } @@ -784,6 +997,9 @@ uint QGList::containsRef( QPtrCollection::Item d ) const  uint QGList::contains( QPtrCollection::Item d ) const  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      register QLNode *n = firstNode;      uint     count = 0;      QGList  *that = (QGList*)this;		// mutable for compareItems() @@ -792,6 +1008,9 @@ uint QGList::contains( QPtrCollection::Item d ) const  	    count++;  	n = n->next;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return count;  } @@ -839,10 +1058,19 @@ uint QGList::contains( QPtrCollection::Item d ) const  QPtrCollection::Item QGList::first()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      if ( firstNode ) {  	curIndex = 0; +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return (curNode=firstNode)->data;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return 0;  } @@ -852,10 +1080,19 @@ QPtrCollection::Item QGList::first()  QPtrCollection::Item QGList::last()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      if ( lastNode ) {  	curIndex = numNodes-1; +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return (curNode=lastNode)->data;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return 0;  } @@ -865,15 +1102,24 @@ QPtrCollection::Item QGList::last()  QPtrCollection::Item QGList::next()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      if ( curNode ) {  	if ( curNode->next ) {  	    curIndex++;  	    curNode = curNode->next; +#if defined(QT_THREAD_SUPPORT) +	    //mutex->unlock(); +#endif  	    return curNode->data;  	}  	curIndex = -1;  	curNode = 0;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return 0;  } @@ -883,15 +1129,24 @@ QPtrCollection::Item QGList::next()  QPtrCollection::Item QGList::prev()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      if ( curNode ) {  	if ( curNode->prev ) {  	    curIndex--;  	    curNode = curNode->prev; +#if defined(QT_THREAD_SUPPORT) +	    //mutex->unlock(); +#endif  	    return curNode->data;  	}  	curIndex = -1;  	curNode = 0;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return 0;  } @@ -902,9 +1157,16 @@ QPtrCollection::Item QGList::prev()  void QGList::toVector( QGVector *vector ) const  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      vector->clear(); -    if ( !vector->resize( count() ) ) +    if ( !vector->resize( count() ) ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return; +    }      register QLNode *n = firstNode;      uint i = 0;      while ( n ) { @@ -912,10 +1174,16 @@ void QGList::toVector( QGVector *vector ) const  	n = n->next;  	i++;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  }  void QGList::heapSortPushDown( QPtrCollection::Item* heap, int first, int last )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      int r = first;      while( r <= last/2 ) {  	// Node r has only one child ? @@ -950,6 +1218,9 @@ void QGList::heapSortPushDown( QPtrCollection::Item* heap, int first, int last )  	    }  	}      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -962,9 +1233,16 @@ void QGList::heapSortPushDown( QPtrCollection::Item* heap, int first, int last )  void QGList::sort()  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      uint n = count(); -    if ( n < 2 ) +    if ( n < 2 ) { +#if defined(QT_THREAD_SUPPORT) +	//mutex->unlock(); +#endif  	return; +    }      // Create the heap      QPtrCollection::Item* realheap = new QPtrCollection::Item[ n ]; @@ -995,6 +1273,9 @@ void QGList::sort()      }      delete [] realheap; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif  } @@ -1019,6 +1300,9 @@ QDataStream &operator<<( QDataStream &s, const QGList &list )  QDataStream &QGList::read( QDataStream &s )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      uint num;      s >> num;					// read number of items      clear();					// clear list @@ -1042,6 +1326,9 @@ QDataStream &QGList::read( QDataStream &s )      }      curNode  = firstNode;      curIndex = curNode ? 0 : -1; +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return s;  } @@ -1051,12 +1338,18 @@ QDataStream &QGList::read( QDataStream &s )  QDataStream &QGList::write( QDataStream &s ) const  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      s << count();				// write number of items      QLNode *n = firstNode;      while ( n ) {				// write all items  	write( s, n->data );  	n = n->next;      } +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return s;  } @@ -1068,9 +1361,15 @@ QDataStream &QGList::write( QDataStream &s ) const   */  QLNode* QGList::erase( QLNode* it )  { +#if defined(QT_THREAD_SUPPORT) +    //mutex->lock(); +#endif      QLNode* n = it;      it = it->next;      removeNode( n ); +#if defined(QT_THREAD_SUPPORT) +    //mutex->unlock(); +#endif      return it;  } diff --git a/src/tools/qglist.h b/src/tools/qglist.h index fadc46c..dfacf47 100644 --- a/src/tools/qglist.h +++ b/src/tools/qglist.h @@ -59,6 +59,8 @@ private:      QLNode( QPtrCollection::Item d ) { data = d; }  }; +class QMutex; +class QGListPrivate;  class QGListIteratorList; // internal helper class  class Q_EXPORT QGList : public QPtrCollection	// doubly linked generic list @@ -147,6 +149,12 @@ private:      QLNode *locate( uint );			// get node at i'th pos      QLNode *unlink();				// unlink node + +#if defined(QT_THREAD_SUPPORT) +//     QMutex* mutex; +#endif + +//     QGListPrivate* d;  }; | 
