summaryrefslogtreecommitdiff
path: root/src/screen.c
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-15 12:38:54 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-15 12:38:54 +0300
commit6ee9eb37d8e616a972fb29b3fbdbc33991aa844f (patch)
tree5b257df9f1301f00ca5de49de60c56be45c67274 /src/screen.c
parentcaf7d446446a0af0b30886a6c4ee5851aab553e2 (diff)
parente3d8fe4854a7ef7ff0637688cda9e65feb680122 (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.c8
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);
}