Review Request 118817: Ensure we never access a given CXTranslationUnit concurrently.

Kevin Funk kfunk at kde.org
Wed Jun 18 18:37:34 UTC 2014


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/118817/#review60434
-----------------------------------------------------------

Ship it!


I like the approach. Makes it impossible to access the TU without acquiring the lock first (because you must instantiate a ParseSession object in order to get a hold of CXTranslationUnit from ParseSessionData).

Fixes the assert for me and nothing broke as far as I can see.

- Kevin Funk


On June 18, 2014, 6:10 p.m., Milian Wolff wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/118817/
> -----------------------------------------------------------
> 
> (Updated June 18, 2014, 6:10 p.m.)
> 
> 
> Review request for KDevelop, Kevin Funk and Olivier Jean de Gaalon.
> 
> 
> Repository: kdev-clang
> 
> 
> Description
> -------
> 
> Ensure we never access a given CXTranslationUnit concurrently.
> 
> ParseSession's data is moved into ParseSessionData, which is the
> actual IAstContainer implementation. It also now stores a QMutex.
> This mutex is implicitly locked inside ParseSession, so you can say
> a ParseSession is now similar to a QMutexLocker, with the difference
> that you can exchange the QMutex it operates on. This simplifies the
> code in the parse job in my opinion.
> 
> The other places where the ParseSession was used are adapted to
> operate on the value type instead of the pointer, where appropriate.
> 
> This patch hopefully fixes the assertions we currently trigger in LLVM
> debug builds. Further optimizations, to e.g. enable concurrent
> read-access, can be investigated later on. I'm not really sure it's
> going to be worth the effort though...
> 
> 
> Diffs
> -----
> 
>   clangparsejob.h 91fe788853991b2450964907c4649873a17cc0e9 
>   clangparsejob.cpp 50b3da507df2410e1c8876d0de52bd67cb51084c 
>   codecompletion/context.h 3e9c6358cd5638a051938d6b4a1f46c3cbdc352e 
>   codecompletion/context.cpp af79ac0350bd4e9aa1373ce894de673bd67efd65 
>   codecompletion/model.cpp 92cec373ee8d4e62966db85fe960849f19e396d1 
>   codegen/clangsignatureassistant.cpp 07357ff23b1d8056b075f6176f99c5038d41201d 
>   duchain/clanghelpers.h 2a759f078fe0baa5b1add514e8af06ad20756c56 
>   duchain/clanghelpers.cpp 3d7c7d9eabb2844671f0a531bea9f2857f0f4c08 
>   duchain/clangpch.h 7adf8fb70f39bb0c1400d649264620a3cc86a8f5 
>   duchain/clangpch.cpp 4f3687b300603a689f48343cad5396b61637a897 
>   duchain/parsesession.h 7754daba425de1cb7149761743994b818740ac8a 
>   duchain/parsesession.cpp a297e2d1f7a79511d1058d8ce06fd43a70875a62 
>   tests/clang-parser.cpp de00f654e1899e71504fdc922a9885838ce94f45 
>   tests/test_codecompletion.cpp 7c95da8c1fb6b5910d738f5eba6fd78cc5ab10e7 
>   tests/test_problems.cpp cc6dddc149eaae540f17509a70def5fa814675e5 
> 
> Diff: https://git.reviewboard.kde.org/r/118817/diff/
> 
> 
> Testing
> -------
> 
> Tests pass and manual testing on a small project seems to work fine as well. I don't have a debug build of llvm though, so if anyone could test that it would be appreciated.
> 
> 
> Thanks,
> 
> Milian Wolff
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20140618/3618e942/attachment.html>


More information about the KDevelop-devel mailing list