diff options
| author | Dan Goodliffe <randomdan@akira.random.lan> | 2014-12-07 15:12:22 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <randomdan@akira.random.lan> | 2014-12-07 15:12:22 +0000 | 
| commit | 5262ff500c3c7a5c6f18db098753f8ee587bd603 (patch) | |
| tree | 85747702c5f81e4fb7fe73f5267084b6913fbe17 | |
| parent | Add a late explicit test that interfaces aren't counted (diff) | |
| download | slicer-5262ff500c3c7a5c6f18db098753f8ee587bd603.tar.bz2 slicer-5262ff500c3c7a5c6f18db098753f8ee587bd603.tar.xz slicer-5262ff500c3c7a5c6f18db098753f8ee587bd603.zip  | |
Add mutex around Slice::Preprocessor calls as they seem to be demonstrably not thread safe
| -rw-r--r-- | slicer/slicer/parser.cpp | 4 | 
1 files changed, 4 insertions, 0 deletions
diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp index 299b178..c7dcec2 100644 --- a/slicer/slicer/parser.cpp +++ b/slicer/slicer/parser.cpp @@ -9,9 +9,12 @@  #include <Slice/CPlusPlusUtil.h>  #include <boost/shared_ptr.hpp>  #include <boost/filesystem/convenience.hpp> +#include <mutex>  namespace fs = boost::filesystem; +std::mutex slicePreprocessor; +  namespace Slicer {  	Slicer::Slicer(FILE * c) :  		components(0), @@ -506,6 +509,7 @@ namespace Slicer {  	Slicer::Apply(const boost::filesystem::path & ice, FILE * cpp)  	{  		std::vector<std::string> cppArgs; +		std::lock_guard<std::mutex> lock(slicePreprocessor);  		Slice::PreprocessorPtr icecpp = Slice::Preprocessor::create("slicer", ice.string(), cppArgs);  		FILE * cppHandle = icecpp->preprocess(false);  | 
