From 5c527e7fec83bddc181291d7df7ddeaeda25e0fb Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Wed, 28 Nov 2012 19:31:09 +0100 Subject: [PATCH] terminal: keep terminal reference in each screen We need to have a terminal reference in future screen callbacks so keep one from the beginning. Signed-off-by: David Herrmann --- src/kmscon_terminal.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index 0bfa42e..17211fe 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -51,6 +51,7 @@ struct screen { struct shl_dlist list; + struct kmscon_terminal *term; struct uterm_display *disp; struct kmscon_font *font; struct kmscon_font *bold_font; @@ -210,6 +211,7 @@ static int add_display(struct kmscon_terminal *term, struct uterm_display *disp) return -ENOMEM; } memset(scr, 0, sizeof(*scr)); + scr->term = term; scr->disp = disp; ret = kmscon_font_find(&scr->font, &attr, term->conf->font_engine); @@ -267,11 +269,11 @@ err_free: return ret; } -static void free_screen(struct kmscon_terminal *term, struct screen *scr, - bool update) +static void free_screen(struct screen *scr, bool update) { struct shl_dlist *iter; struct screen *ent; + struct kmscon_terminal *term = scr->term; log_debug("destroying terminal screen %p", scr); shl_dlist_unlink(&scr->list); @@ -312,7 +314,7 @@ static void rm_display(struct kmscon_terminal *term, struct uterm_display *disp) return; log_debug("removed display %p from terminal %p", disp, term); - free_screen(term, scr, true); + free_screen(scr, true); } static void input_event(struct uterm_input *input, @@ -374,7 +376,7 @@ static void rm_all_screens(struct kmscon_terminal *term) while ((iter = term->screens.next) != &term->screens) { scr = shl_dlist_entry(iter, struct screen, list); - free_screen(term, scr, false); + free_screen(scr, false); } term->min_cols = 0;