diff options
| author | Berke Güzel <wenekar1@gmail.com> | 2026-10-15 12:38:54 +0300 |
|---|---|---|
| committer | Berke Güzel <wenekar1@gmail.com> | 2026-10-15 12:38:54 +0300 |
| commit | 6ee9eb37d8e616a972fb29b3fbdbc33991aa844f (patch) | |
| tree | 5b257df9f1301f00ca5de49de60c56be45c67274 /src/screen.c | |
| parent | caf7d446446a0af0b30886a6c4ee5851aab553e2 (diff) | |
| parent | e3d8fe4854a7ef7ff0637688cda9e65feb680122 (diff) | |
Merge branch 'wt/lock' into api-hardening
# Conflicts:
# src/screen.c
# tests/term_test.c
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); } |
