Fix multithreading crash (bug #9366)

This minimal fix makes the crash go away on my machine. A much more complete
fix is in master (and will be futher extended), but for 2.1.x we'll do only
minimal changes.
This commit is contained in:
Georg Baum 2015-01-05 21:44:37 +01:00
parent f3a45effbf
commit f067babf6e
4 changed files with 23 additions and 1 deletions

View File

@ -38,6 +38,12 @@ Language const * latex_language = 0;
Language const * reset_language = 0; Language const * reset_language = 0;
std::string const Language::babel() const
{
return deep_copy(babel_);
}
bool Language::isPolyglossiaExclusive() const bool Language::isPolyglossiaExclusive() const
{ {
return babel().empty() && !polyglossia().empty() && requires().empty(); return babel().empty() && !polyglossia().empty() && requires().empty();

View File

@ -35,7 +35,7 @@ public:
/// LyX language name /// LyX language name
std::string const & lang() const { return lang_; } std::string const & lang() const { return lang_; }
/// Babel language name /// Babel language name
std::string const & babel() const { return babel_; } std::string const babel() const;
/// polyglossia language name /// polyglossia language name
std::string const & polyglossia() const { return polyglossia_name_; } std::string const & polyglossia() const { return polyglossia_name_; }
/// polyglossia language options /// polyglossia language options

View File

@ -24,6 +24,19 @@
namespace lyx { namespace lyx {
namespace support { namespace support {
/// Helper to enforce creating a deep copy of lyx::docstring or std::string
/// even if std::basic_string uses copy-on-write as in GNU libstdc++.
/// \sa https://gcc.gnu.org/bugzilla/show_bug.cgi?id=21334
template<typename Char, typename Traits, typename Alloc>
typename std::basic_string<Char, Traits, Alloc>
deep_copy(typename std::basic_string<Char, Traits, Alloc> const & src)
{
typedef typename std::basic_string<Char, Traits, Alloc> String;
// Use constructor with two arguments to support strings with embedded
// \0 characters
return String(src.c_str(), src.length());
}
/// Compare \p s and \p s2, ignoring the case. /// Compare \p s and \p s2, ignoring the case.
/// Does not depend on the locale. /// Does not depend on the locale.
int compare_no_case(docstring const & s, docstring const & s2); int compare_no_case(docstring const & s, docstring const & s2);

View File

@ -158,6 +158,9 @@ What's new
- Fix logic of "Maintain aspect ratio" checkbox in the graphics dialog - Fix logic of "Maintain aspect ratio" checkbox in the graphics dialog
(bug 9357). (bug 9357).
- Fix most frequent reason for crash while editing with open view source
window (bug 9336).
* INTERNALS * INTERNALS