void uterm_vt_deallocate(struct uterm_vt *vt) { unsigned int mode; if (!vt || !vt->vtm || vt->mode == UTERM_VT_DEAD) return; mode = vt->mode; vt->mode = UTERM_VT_DEAD; if (mode == UTERM_VT_REAL) { real_close(vt); } else if (mode == UTERM_VT_FAKE) { ev_eloop_unregister_idle_cb(vt->vtm->eloop, vt_idle_event, vt); vt_call(vt, UTERM_VT_DEACTIVATE); } ev_eloop_unregister_signal_cb(vt->vtm->eloop, SIGUSR2, vt_sigusr2, vt); ev_eloop_unregister_signal_cb(vt->vtm->eloop, SIGUSR1, vt_sigusr1, vt); kmscon_dlist_unlink(&vt->list); uterm_input_sleep(vt->input); uterm_input_unref(vt->input); vt->vtm = NULL; uterm_vt_unref(vt); }
/* Pressing Ctrl-\ should toggle the capturing. */ static void sig_quit(struct ev_eloop *p, struct signalfd_siginfo *info, void *data) { if (!input) return; if (uterm_input_is_awake(input)) { uterm_input_sleep(input); log_info("Went to sleep\n"); } else { uterm_input_wake_up(input); log_info("Woke Up\n"); } }