[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/strigi/src/streamanalyzer
From: Jos van den Oever <jos () vandenoever ! info>
Date: 2007-04-25 19:57:58
Message-ID: 1177531078.150983.20494.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 658052 by vandenoever:
better locking of global helper class
M +18 -3 analysisresult.cpp
--- trunk/kdesupport/strigi/src/streamanalyzer/analysisresult.cpp #658051:658052
@@ -32,10 +32,10 @@
using namespace std;
class Latin1Converter {
- STRIGI_MUTEX_DEFINE(mutex);
iconv_t const conv;
char* out;
size_t outlen;
+ STRIGI_MUTEX_DEFINE(mutex);
int32_t _fromLatin1(char*& out, const char* data, size_t len);
Latin1Converter() :conv(iconv_open("UTF-8", "ISO-8859-1")), outlen(0) {
@@ -46,11 +46,20 @@
free(out);
STRIGI_MUTEX_DESTROY(&mutex);
}
+ static Latin1Converter& converter() {
+ static Latin1Converter l;
+ return l;
+ }
public:
static int32_t fromLatin1(char*& out, const char* data, int32_t len) {
- static Latin1Converter l;
- return l._fromLatin1(out, data, len);
+ return converter()._fromLatin1(out, data, len);
}
+ static void lock() {
+ STRIGI_MUTEX_LOCK(&converter().mutex);
+ }
+ static void unlock() {
+ STRIGI_MUTEX_UNLOCK(&converter().mutex);
+ }
};
int32_t
Latin1Converter::_fromLatin1(char*& o, const char* data, size_t len) {
@@ -163,6 +172,7 @@
if (checkUtf8(text, length)) {
p->m_writer.addText(this, text, length);
} else {
+ Latin1Converter::lock();
char* d;
size_t len = Latin1Converter::fromLatin1(d, text, length);
if (len && checkUtf8(d, len)) {
@@ -171,6 +181,7 @@
fprintf(stderr, "'%.*s' is not a UTF8 or latin1 string\n",
length, text);
}
+ Latin1Converter::unlock();
}
}
AnalyzerConfiguration&
@@ -203,6 +214,7 @@
if (checkUtf8(val)) {
p->m_writer.addValue(this, field, val);
} else {
+ Latin1Converter::lock();
char* d;
size_t len = Latin1Converter::fromLatin1(d, val.c_str(), val.length());
if (len && checkUtf8(d, len)) {
@@ -211,6 +223,7 @@
fprintf(stderr, "'%s' is not a UTF8 or latin1 string\n",
val.c_str());
}
+ Latin1Converter::unlock();
}
}
void
@@ -219,6 +232,7 @@
if (checkUtf8(data, length)) {
p->m_writer.addValue(this, field, (const unsigned char*)data, length);
} else {
+ Latin1Converter::lock();
char* d;
size_t len = Latin1Converter::fromLatin1(d, data, length);
if (len && checkUtf8(d, len)) {
@@ -227,6 +241,7 @@
fprintf(stderr, "'%.*s' is not a UTF8 or latin1 string\n",
length, data);
}
+ Latin1Converter::unlock();
}
}
void
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic