diff --git a/dbcon/joblist/fifo.h b/dbcon/joblist/fifo.h index a6bd286da..6a0fca56d 100644 --- a/dbcon/joblist/fifo.h +++ b/dbcon/joblist/fifo.h @@ -345,17 +345,27 @@ void FIFO::signalPs() template inline bool FIFO::next(uint64_t id, element_t *out) { + base::mutex.lock(); fConsumptionStarted = true; if (cpos[id] >= fMaxElements) + { + base::mutex.unlock(); if (!waitForSwap(id)) return false; + base::mutex.lock(); + } *out = cBuffer[cpos[id]++]; #ifndef ONE_CS if (cpos[id] == fMaxElements) + { + base::mutex.unlock(); signalPs(); + return true; + } #endif + base::mutex.unlock(); return true; } diff --git a/primitives/linux-port/column.cpp b/primitives/linux-port/column.cpp index cdb70ef67..bed121517 100644 --- a/primitives/linux-port/column.cpp +++ b/primitives/linux-port/column.cpp @@ -65,8 +65,6 @@ inline uint64_t order_swap(uint64_t x) template inline string fixChar(int64_t intval); -idb_regex_t placeholderRegex; - template inline int compareBlock( const void * a, const void * b ) { @@ -954,6 +952,7 @@ inline void p_Col_ridArray(NewColRequestHeader *in, uint16_t *ridArray=0; uint8_t *in8 = reinterpret_cast(in); const uint8_t filterSize = sizeof(uint8_t) + sizeof(uint8_t) + W; + idb_regex_t placeholderRegex; placeholderRegex.used = false;