2
* @file test/mt_extracttest1.c
3
* @brief test keyword extraction from multiple threads simultaneously
4
* @author Heikki Lindholm
16
static volatile int done = 0;
17
static volatile int failed = 0;
19
pthread_mutex_t reference_lock = PTHREAD_MUTEX_INITIALIZER;
20
static EXTRACTOR_KeywordList *reference_list;
23
compare_keywords_to_ref (EXTRACTOR_KeywordList * list)
25
EXTRACTOR_KeywordList *ptr1, *ptr2;
30
cnt = EXTRACTOR_countKeywords (list);
32
pthread_mutex_lock (&reference_lock);
34
if (cnt != EXTRACTOR_countKeywords (reference_list))
36
pthread_mutex_unlock (&reference_lock);
40
match = alloca (cnt * sizeof (int));
41
memset (match, 0x00, cnt * sizeof (int));
47
ptr2 = reference_list;
51
if (ptr2->keywordType == ptr1->keywordType &&
52
strcmp (ptr2->keyword, ptr1->keyword) == 0 && match[i] == 0)
66
pthread_mutex_unlock (&reference_lock);
67
for (i = 0; i < cnt; i++)
74
static EXTRACTOR_KeywordList *
75
get_keywords_for_file (const char *filename)
77
EXTRACTOR_ExtractorList *el;
78
EXTRACTOR_KeywordList *list;
80
el = EXTRACTOR_loadDefaultLibraries ();
83
printf ("ERROR: failed to load plugins!\n");
87
list = EXTRACTOR_getKeywords (el, filename);
89
printf("ERROR: EXTRACTOR_getKeywords: %s\n", strerror(errno));
91
/*EXTRACTOR_printKeywords (stderr, list); */
92
EXTRACTOR_removeAll (el);
98
test_plugins (void *arg)
100
struct TaskData *td = (struct TaskData *)arg;
103
EXTRACTOR_KeywordList *list;
105
list = get_keywords_for_file (td->filename);
107
if ((list == NULL) || (compare_keywords_to_ref (list) != 0))
109
printf ("ERROR: thread id %d failed keyword comparison!\n", td->id);
113
EXTRACTOR_freeKeywords (list);
118
static const char *filename = TESTDATADIR "/text2.sxw";
123
main (int argc, char *argv[])
126
pthread_t task_list[num_tasks];
127
struct TaskData td[num_tasks];
131
printf("testing with '%s' for %d seconds\n", filename, TEST_SECS);
132
reference_list = get_keywords_for_file (filename);
134
for (i = 0; i < num_tasks; i++)
137
td[i].filename = filename;
138
ret = pthread_create (&task_list[i], NULL, test_plugins, &td[i]);
141
printf ("ERROR: pthread_create failed for thread %d\n", i);
150
for (i = 0; i < num_tasks; i++)
152
if (pthread_join (task_list[i], NULL) != 0)
153
printf ("WARNING: pthread_join failed for thread %d\n", i);
156
if (reference_list != NULL)
157
EXTRACTOR_freeKeywords (reference_list);