term: destroy: handle rendering threads not being initialized

We sort of already did this. However, we did not handle the case where
the thread array itself hadn't yet been allocated.
This commit is contained in:
Daniel Eklöf 2020-04-29 20:08:19 +02:00
parent 84e945a851
commit 1d67f37045
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

View file

@ -1046,16 +1046,18 @@ term_destroy(struct terminal *term)
/* Count livinig threads - we may get here when only some of the
* threads have been successfully started */
size_t worker_count = 0;
for (size_t i = 0; i < term->render.workers.count; i++, worker_count++) {
if (term->render.workers.threads[i] == 0)
break;
}
if (term->render.workers.threads != NULL) {
for (size_t i = 0; i < term->render.workers.count; i++, worker_count++) {
if (term->render.workers.threads[i] == 0)
break;
}
for (size_t i = 0; i < worker_count; i++) {
sem_post(&term->render.workers.start);
tll_push_back(term->render.workers.queue, -2);
for (size_t i = 0; i < worker_count; i++) {
sem_post(&term->render.workers.start);
tll_push_back(term->render.workers.queue, -2);
}
cnd_broadcast(&term->render.workers.cond);
}
cnd_broadcast(&term->render.workers.cond);
mtx_unlock(&term->render.workers.lock);
free(term->vt.osc.data);
@ -1077,9 +1079,11 @@ term_destroy(struct terminal *term)
free(term->search.buf);
for (size_t i = 0; i < term->render.workers.count; i++) {
if (term->render.workers.threads[i] != 0)
thrd_join(term->render.workers.threads[i], NULL);
if (term->render.workers.threads != NULL) {
for (size_t i = 0; i < term->render.workers.count; i++) {
if (term->render.workers.threads[i] != 0)
thrd_join(term->render.workers.threads[i], NULL);
}
}
free(term->render.workers.threads);
cnd_destroy(&term->render.workers.cond);