67d5de8487
See upstream <https://sourceforge.net/p/clucene/bugs/232/> "Patches for TestIndexSearcher failures" for details. In the %check section: * "||:" is probably still needed to make some other failures "for ppc and s390 (big endian 32 bit archs)" non-fatal. * "--timeout 300" could presumably be removed now that 0002-Avoid-deadlock-in-TestIndexSearcher.patch takes care of the deadlock I occasionally experienced when running the tests. (It had been added with3693cab5ba
"2.3.3.4-14.20130812.e8e3d20git", but only mentioning "fix tests".) * "export CTEST_OUTPUT_ON_FAILURE=1" and "--output-on-failure" may or may not be relevant any longer. (They too had been added with3693cab5ba
"2.3.3.4-14.20130812.e8e3d20git", but only mentioning "fix tests".)
113 lines
3.4 KiB
Diff
113 lines
3.4 KiB
Diff
From bdc374bfbb0ca34ddb40713eb51d8535fdf11952 Mon Sep 17 00:00:00 2001
|
|
From: Stephan Bergmann <sbergman@redhat.com>
|
|
Date: Wed, 31 Jul 2019 16:27:33 +0200
|
|
Subject: [PATCH 2/2] Avoid deadlock in TestIndexSearcher
|
|
|
|
---
|
|
src/test/search/TestIndexSearcher.cpp | 51 +++++++++++++++++++++------
|
|
1 file changed, 41 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/src/test/search/TestIndexSearcher.cpp b/src/test/search/TestIndexSearcher.cpp
|
|
index 02c21aaf..a6dde5ba 100644
|
|
--- a/src/test/search/TestIndexSearcher.cpp
|
|
+++ b/src/test/search/TestIndexSearcher.cpp
|
|
@@ -8,9 +8,11 @@
|
|
|
|
DEFINE_MUTEX(searchMutex);
|
|
DEFINE_CONDITION(searchCondition);
|
|
+bool searchReady;
|
|
|
|
DEFINE_MUTEX(deleteMutex);
|
|
DEFINE_CONDITION(deleteCondition);
|
|
+bool deleteReady;
|
|
|
|
_LUCENE_THREAD_FUNC(searchDocs, _searcher) {
|
|
|
|
@@ -19,15 +21,20 @@ _LUCENE_THREAD_FUNC(searchDocs, _searcher) {
|
|
Query * query = QueryParser::parse(_T("one"), _T("content"), &an);
|
|
Hits * hits = searcher->search(query);
|
|
|
|
-// _LUCENE_SLEEP(9999); //make sure that searchMutex is being waited on...
|
|
+ {
|
|
+ SCOPED_LOCK_MUTEX(searchMutex);
|
|
+ searchReady = true;
|
|
+ CONDITION_NOTIFYALL(searchCondition);
|
|
+ }
|
|
|
|
- CONDITION_NOTIFYALL(searchCondition);
|
|
SCOPED_LOCK_MUTEX(deleteMutex);
|
|
|
|
_CLLDELETE(hits);
|
|
_CLLDELETE(query);
|
|
|
|
- CONDITION_WAIT(deleteMutex, deleteCondition);
|
|
+ while (!deleteReady) {
|
|
+ CONDITION_WAIT(deleteMutex, deleteCondition);
|
|
+ }
|
|
_LUCENE_THREAD_FUNC_RETURN(0);
|
|
}
|
|
|
|
@@ -55,13 +62,24 @@ void testEndThreadException(CuTest *tc) {
|
|
|
|
// this sequence is OK: delete searcher after search thread finish
|
|
{
|
|
+ searchReady = false;
|
|
+ deleteReady = false;
|
|
+
|
|
IndexSearcher * searcher = _CLNEW IndexSearcher(&ram);
|
|
_LUCENE_THREADID_TYPE thread = _LUCENE_THREAD_CREATE(&searchDocs, searcher);
|
|
- SCOPED_LOCK_MUTEX(searchMutex);
|
|
|
|
- CONDITION_WAIT(searchMutex, searchCondition);
|
|
-// _LUCENE_SLEEP(9999); //make sure that deleteMutex is being waited on...
|
|
- CONDITION_NOTIFYALL(deleteCondition);
|
|
+ {
|
|
+ SCOPED_LOCK_MUTEX(searchMutex);
|
|
+ while (!searchReady) {
|
|
+ CONDITION_WAIT(searchMutex, searchCondition);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ {
|
|
+ SCOPED_LOCK_MUTEX(deleteMutex);
|
|
+ deleteReady = true;
|
|
+ CONDITION_NOTIFYALL(deleteCondition);
|
|
+ }
|
|
|
|
_LUCENE_THREAD_JOIN(thread);
|
|
|
|
@@ -71,14 +89,27 @@ void testEndThreadException(CuTest *tc) {
|
|
|
|
// this produces memory exception: delete searcher after search finish but before thread finish
|
|
{
|
|
+ searchReady = false;
|
|
+ deleteReady = false;
|
|
+
|
|
IndexSearcher * searcher = _CLNEW IndexSearcher(&ram);
|
|
_LUCENE_THREADID_TYPE thread = _LUCENE_THREAD_CREATE(&searchDocs, searcher);
|
|
- SCOPED_LOCK_MUTEX(searchMutex);
|
|
|
|
- CONDITION_WAIT(searchMutex, searchCondition);
|
|
+ {
|
|
+ SCOPED_LOCK_MUTEX(searchMutex);
|
|
+ while (!searchReady) {
|
|
+ CONDITION_WAIT(searchMutex, searchCondition);
|
|
+ }
|
|
+ }
|
|
+
|
|
searcher->close();
|
|
_CLLDELETE(searcher);
|
|
- CONDITION_NOTIFYALL(deleteCondition);
|
|
+
|
|
+ {
|
|
+ SCOPED_LOCK_MUTEX(deleteMutex);
|
|
+ deleteReady = true;
|
|
+ CONDITION_NOTIFYALL(deleteCondition);
|
|
+ }
|
|
|
|
_LUCENE_THREAD_JOIN(thread);
|
|
}
|
|
--
|
|
2.21.0
|
|
|