]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBibitem.cpp
Remove zombie noncopyable.hpp dependency
[lyx.git] / src / insets / InsetBibitem.cpp
index 2840ad5c8fff621f51992f53c8595845513940d3..d0a28e73fe964d02965d168b1b6829fa78f51096 100644 (file)
@@ -41,6 +41,7 @@
 #include "support/docstream.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
+#include "support/mutex.h"
 
 using namespace std;
 using namespace lyx::support;
@@ -49,6 +50,7 @@ namespace lyx {
 
 
 int InsetBibitem::key_counter = 0;
+static Mutex counter_mutex;
 docstring const key_prefix = from_ascii("key-");
 
 
@@ -56,8 +58,10 @@ InsetBibitem::InsetBibitem(Buffer * buf, InsetCommandParams const & p)
        : InsetCommand(buf, p)
 {
        buffer().invalidateBibinfoCache();
-       if (getParam("key").empty())
+       if (getParam("key").empty()) {
+               Mutex::Locker lock(&counter_mutex);
                setParam("key", key_prefix + convert<docstring>(++key_counter));
+       }
 }
 
 
@@ -77,12 +81,10 @@ void InsetBibitem::initView()
 void InsetBibitem::updateCommand(docstring const & new_key, bool)
 {
        docstring key = new_key;
-
        vector<docstring> bibkeys = buffer().masterBibInfo().getKeys();
 
-       int i = 1;
-
        if (find(bibkeys.begin(), bibkeys.end(), key) != bibkeys.end()) {
+               int i = 1;
                // generate unique label
                key = new_key + '-' + convert<docstring>(i);
                while (find(bibkeys.begin(), bibkeys.end(), key) != bibkeys.end()) {
@@ -130,7 +132,6 @@ void InsetBibitem::doDispatch(Cursor & cur, FuncRequest & cmd)
                docstring label = p["label"];
 
                // definitions for escaping
-               int previous;
                static docstring const backslash = from_ascii("\\");
                static docstring const lbrace = from_ascii("{");
                static docstring const rbrace = from_ascii("}");
@@ -139,6 +140,7 @@ void InsetBibitem::doDispatch(Cursor & cur, FuncRequest & cmd)
                static char_type const brackets_escape[2] = {'[', ']'};
 
                if (!label.empty()) {
+                       int previous;
                        // The characters in chars_name[] need to be changed to a command when
                        // they are in the name field.
                        for (int k = 0; k < 6; k++)
@@ -197,6 +199,7 @@ void InsetBibitem::read(Lexer & lex)
 
        if (prefixIs(getParam("key"), key_prefix)) {
                int const key = convert<int>(getParam("key").substr(key_prefix.length()));
+               Mutex::Locker lock(&counter_mutex);
                key_counter = max(key_counter, key);
        }
 }