From: David Herrmann Date: Sun, 9 Dec 2012 12:37:39 +0000 (+0100) Subject: kmscon: set uterm-seat data in seat-creation X-Git-Tag: kmscon-7~148 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c4a1a335979d842cba91de9db743c49f59796775;p=platform%2Fupstream%2Fkmscon.git kmscon: set uterm-seat data in seat-creation If we want to be able to destroy seats from anywhere, not just uterm-monitor callbacks, we need to be able to reset the monitor-event seat-data so we no longer access the seat memory. Hence, move the seat-data set/reset logic into the actual seat creation/destroy functions. Signed-off-by: David Herrmann --- diff --git a/src/kmscon_main.c b/src/kmscon_main.c index 0efd34d..f227502 100644 --- a/src/kmscon_main.c +++ b/src/kmscon_main.c @@ -52,6 +52,7 @@ struct app_video { struct app_seat { struct shl_dlist list; struct kmscon_app *app; + struct uterm_monitor_seat *useat; bool awake; char *name; @@ -143,7 +144,7 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, } static int app_seat_new(struct kmscon_app *app, struct app_seat **out, - const char *sname) + const char *sname, struct uterm_monitor_seat *useat) { struct app_seat *seat; int ret; @@ -177,6 +178,7 @@ static int app_seat_new(struct kmscon_app *app, struct app_seat **out, } memset(seat, 0, sizeof(*seat)); seat->app = app; + seat->useat = useat; shl_dlist_init(&seat->videos); seat->name = strdup(sname); @@ -204,6 +206,7 @@ static int app_seat_new(struct kmscon_app *app, struct app_seat **out, seat->conf_ctx = kmscon_seat_get_conf(seat->seat); seat->conf = conf_ctx_get_mem(seat->conf_ctx); + uterm_monitor_set_seat_data(seat->useat, seat); shl_dlist_link(&app->seats, &seat->list); ++app->running_seats; *out = seat; @@ -221,6 +224,7 @@ static void app_seat_free(struct app_seat *seat) log_debug("free seat %s", seat->name); shl_dlist_unlink(&seat->list); + uterm_monitor_set_seat_data(seat->useat, NULL); kmscon_seat_free(seat->seat); free(seat->name); free(seat); @@ -400,10 +404,9 @@ static void app_monitor_event(struct uterm_monitor *mon, switch (ev->type) { case UTERM_MONITOR_NEW_SEAT: - ret = app_seat_new(app, &seat, ev->seat_name); + ret = app_seat_new(app, &seat, ev->seat_name, ev->seat); if (ret) return; - uterm_monitor_set_seat_data(ev->seat, seat); break; case UTERM_MONITOR_FREE_SEAT: if (ev->seat_data)