Browse code

Store worker_count on choices_t

John Hawthorn authored on 23/06/2016 04:26:21
Showing 2 changed files

... ...
@@ -104,6 +104,8 @@ void choices_init(choices_t *c) {
104 104
 	c->capacity = c->size = 0;
105 105
 	choices_resize(c, INITIAL_CHOICE_CAPACITY);
106 106
 
107
+	c->worker_count = 8;
108
+
107 109
 	choices_reset_search(c);
108 110
 }
109 111
 
... ...
@@ -149,8 +151,8 @@ static void *choices_search_worker(void *data) {
149 151
 	struct worker *w = (struct worker *)data;
150 152
 	const choices_t *c = w->choices;
151 153
 
152
-	size_t start = (w->worker_num) * c->size / w->worker_count;
153
-	size_t end = (w->worker_num + 1) * c->size / w->worker_count;
154
+	size_t start = (w->worker_num) * c->size / c->worker_count;
155
+	size_t end = (w->worker_num + 1) * c->size / c->worker_count;
154 156
 
155 157
 	for(size_t i = start; i < end; i++) {
156 158
 		if (has_match(w->search, c->strings[i])) {
... ...
@@ -173,12 +175,10 @@ void choices_search(choices_t *c, const char *search) {
173 175
 		abort();
174 176
 	}
175 177
 
176
-	int worker_count = 8;
177
-	struct worker *workers = calloc(worker_count, sizeof(struct worker));
178
-	for (int i = 0; i < worker_count; i++) {
178
+	struct worker *workers = calloc(c->worker_count, sizeof(struct worker));
179
+	for (unsigned int i = 0; i < c->worker_count; i++) {
179 180
 		workers[i].choices = c;
180 181
 		workers[i].search = search;
181
-		workers[i].worker_count = worker_count;
182 182
 		workers[i].worker_num = i;
183 183
 		workers[i].results = malloc(c->size * sizeof(struct scored_result)); /* FIXME: This is overkill */
184 184
 		if (pthread_create(&workers[i].thread_id, NULL, &choices_search_worker, &workers[i])) {
... ...
@@ -187,7 +187,7 @@ void choices_search(choices_t *c, const char *search) {
187 187
 		}
188 188
 	}
189 189
 
190
-	for (int i = 0; i < worker_count; i++) {
190
+	for (unsigned int i = 0; i < c->worker_count; i++) {
191 191
 		struct worker *w = &workers[i];
192 192
 
193 193
 		if (pthread_join(w->thread_id, NULL)) {
... ...
@@ -20,6 +20,8 @@ typedef struct {
20 20
 
21 21
 	size_t available;
22 22
 	size_t selection;
23
+
24
+	unsigned int worker_count;
23 25
 } choices_t;
24 26
 
25 27
 void choices_init(choices_t *c);