diff options
Diffstat (limited to 'src/screen.c')
| -rw-r--r-- | src/screen.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/screen.c b/src/screen.c index 0857f17..b99948d 100644 --- a/src/screen.c +++ b/src/screen.c @@ -874,8 +874,11 @@ struct term *term_new(const struct term_options *opt) struct term *t = calloc(1, sizeof(*t)); if (!t) return NULL; + if (!term_mutex_init(&t->write_lock)) { + free(t); + return NULL; + } memcpy(t->name, name, strlen(name) + 1); - atomic_init(&t->seq, 0); atomic_init(&t->writer_tid, 0); t->write_depth = 0; t->serial = atomic_fetch_add_explicit(&next_serial, 1, memory_order_relaxed); @@ -890,11 +893,13 @@ struct term *term_new(const struct term_options *opt) t->next_row_uid = 1; if (!screen_setup(&t->scr, cols, rows, &t->next_row_uid)) { + term_mutex_destroy(&t->write_lock); free(t); return NULL; } if (!term_hist_init(&t->hist, t->sb_capacity, 0)) { screen_free(&t->scr); + term_mutex_destroy(&t->write_lock); free(t); return NULL; } @@ -951,6 +956,7 @@ void term_free(struct term *t) free(t->tabs); term_osc_cleanup(t); term_gstore_free(t->gstore); + term_mutex_destroy(&t->write_lock); free(t); } |
