[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdevelop/parts/cppsupport
From:       Roberto Raggi <roberto () kdevelop ! org>
Date:       2003-04-23 8:26:20
[Download RAW message or body]

CVS commit by raggi: 

hotfix: background parser deadlock


  M +24 -8     cppcodecompletion.cpp   1.89


--- kdevelop/parts/cppsupport/cppcodecompletion.cpp  #1.88:1.89
@@ -376,8 +376,10 @@ CppCodeCompletion::slotTextChanged()
     QString ch2 = strCurLine.mid( nCol-2, 2 );
 
-    m_ccLine = nLine;
-    m_ccColumn = nCol;
+    m_ccLine = 0;
+    m_ccColumn = 0;
     
     if ( ch == "(" || ch == "." || ch2 == "->" || ch2 == "::" ){
+        m_ccLine = nLine;
+        m_ccColumn = nCol;
         m_ccTimer->start( 500, true );
     }
@@ -602,4 +604,8 @@ CppCodeCompletion::completeText( )
     QString expr, word;
 
+    // sync
+    while( m_pSupport->backgroundParser()->filesInQueue() > 0 )
+         m_pSupport->backgroundParser()->isEmpty().wait();
+
     m_pSupport->backgroundParser()->lock();
     AST* ast = m_pSupport->backgroundParser()->translationUnit( m_activeFileName );
@@ -732,4 +738,5 @@ CppCodeCompletion::completeText( )
         if( FunctionDefinitionAST* def = functionDefinition(node) ){
 
+            kdDebug(9007) << "------> found a function definition" << endl;
 
             int startLine, startColumn;
@@ -737,7 +744,12 @@ CppCodeCompletion::completeText( )
 
             QString contents = getText( startLine, startColumn, line, showArguments \
? column-1 : column ); +
+            kdDebug(9007) << "------> computed context" << endl;
+
             // kdDebug(9007) << "contents = |" << contents << "|" << endl;
 
             int start_expr = expressionAt( contents, contents.length() - 1 );
+
+            kdDebug(9007) << "------> found expression at " << start_expr << endl;
             // kdDebug(9007) << "start_expr = " << start_expr << endl;
             if( start_expr != int(contents.length()) - 1 ){
@@ -775,10 +787,10 @@ CppCodeCompletion::completeText( )
             }
 
-            m_pSupport->backgroundParser()->unlock();
-
             type = typeName( evaluateExpression(expr, ctx) );
             delete( ctx );
             ctx = 0;
        }
+
+       m_pSupport->backgroundParser()->unlock();
     }
 
@@ -853,4 +865,8 @@ void CppCodeCompletion::slotFileParsed( 
     if( fileName != m_activeFileName || !m_pSupport || !m_activeEditor )
         return;
+
+    // sync
+    while( m_pSupport->backgroundParser()->filesInQueue() > 0 )
+         m_pSupport->backgroundParser()->isEmpty().wait();
 
     m_pSupport->backgroundParser()->lock();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic