summaryrefslogtreecommitdiffstats
path: root/sysutils/consolekit/files/patch-src_ck-vt-monitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/consolekit/files/patch-src_ck-vt-monitor.c')
-rw-r--r--sysutils/consolekit/files/patch-src_ck-vt-monitor.c130
1 files changed, 0 insertions, 130 deletions
diff --git a/sysutils/consolekit/files/patch-src_ck-vt-monitor.c b/sysutils/consolekit/files/patch-src_ck-vt-monitor.c
deleted file mode 100644
index 7db4a4682..000000000
--- a/sysutils/consolekit/files/patch-src_ck-vt-monitor.c
+++ /dev/null
@@ -1,130 +0,0 @@
---- src/ck-vt-monitor.c.orig 2008-01-23 09:30:44.000000000 -0500
-+++ src/ck-vt-monitor.c 2008-01-23 15:29:52.000000000 -0500
-@@ -54,6 +54,9 @@ struct CkVtMonitorPrivate
-
- GAsyncQueue *event_queue;
- guint process_queue_id;
-+
-+ GAsyncQueue *restart_queue;
-+ guint restart_queue_id;
- };
-
- enum {
-@@ -72,6 +75,7 @@ static void ck_vt_monitor_init
- static void ck_vt_monitor_finalize (GObject *object);
-
- static void vt_add_watches (CkVtMonitor *vt_monitor);
-+static void vt_add_watch_unlocked (CkVtMonitor *vt_monitor, gint32 num);
-
- G_DEFINE_TYPE (CkVtMonitor, ck_vt_monitor, G_TYPE_OBJECT)
-
-@@ -254,6 +258,56 @@ process_queue (CkVtMonitor *vt_monitor)
- return FALSE;
- }
-
-+static gboolean
-+process_restart_queue (CkVtMonitor *vt_monitor)
-+{
-+ int i;
-+ int queue_length;
-+ EventData *data;
-+ EventData *d;
-+
-+ g_async_queue_lock (vt_monitor->priv->restart_queue);
-+
-+ g_debug ("Processing VT restart queue");
-+
-+ queue_length = g_async_queue_length_unlocked (vt_monitor->priv->restart_queue);
-+ data = NULL;
-+
-+ G_LOCK (hash_lock);
-+
-+ /* compress events in the queue */
-+ for (i = 0; i < queue_length; i++) {
-+ d = g_async_queue_try_pop_unlocked (vt_monitor->priv->restart_queue);
-+ if (d == NULL) {
-+ continue;
-+
-+ }
-+
-+ if (data != NULL) {
-+ g_debug ("Compressing queue; skipping restart for VT %d", data->num);
-+ event_data_free (data);
-+ }
-+
-+ data = d;
-+ }
-+
-+ if (data != NULL) {
-+ vt_add_watch_unlocked (vt_monitor, data->num);
-+ event_data_free (data);
-+ }
-+
-+ G_UNLOCK (hash_lock);
-+
-+ G_LOCK (schedule_lock);
-+ vt_monitor->priv->restart_queue_id = 0;
-+ G_UNLOCK (schedule_lock);
-+
-+ g_async_queue_unlock (vt_monitor->priv->restart_queue);
-+
-+ return FALSE;
-+}
-+
-+
- static void
- schedule_process_queue (CkVtMonitor *vt_monitor)
- {
-@@ -264,6 +318,16 @@ schedule_process_queue (CkVtMonitor *vt_
- G_UNLOCK (schedule_lock);
- }
-
-+static void
-+schedule_process_restart_queue (CkVtMonitor *vt_monitor)
-+{
-+ G_LOCK (schedule_lock);
-+ if (vt_monitor->priv->restart_queue_id == 0) {
-+ vt_monitor->priv->restart_queue_id = g_idle_add ((GSourceFunc)process_restart_queue, vt_monitor);
-+ }
-+ G_UNLOCK (schedule_lock);
-+}
-+
- static void *
- vt_thread_start (ThreadData *data)
- {
-@@ -277,7 +341,15 @@ vt_thread_start (ThreadData *data)
-
- res = ck_wait_for_active_console_num (vt_monitor->priv->vfd, num);
- if (! res) {
-- /* FIXME: what do we do if it fails? */
-+ EventData *event;
-+
-+ event = g_new0 (EventData, 1);
-+ event->num = num;
-+ g_debug ("Failed to wait for active console %d: %s", num, g_strerror (errno));
-+
-+ g_async_queue_push (vt_monitor->priv->restart_queue, event);
-+
-+ schedule_process_restart_queue (vt_monitor);
- } else {
- EventData *event;
-
-@@ -414,6 +486,7 @@ ck_vt_monitor_init (CkVtMonitor *vt_moni
-
- vt_monitor->priv->active_num = active;
- vt_monitor->priv->event_queue = g_async_queue_new ();
-+ vt_monitor->priv->restart_queue = g_async_queue_new ();
- vt_monitor->priv->vt_thread_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- vt_add_watches (vt_monitor);
-@@ -440,6 +513,10 @@ ck_vt_monitor_finalize (GObject *object)
- g_async_queue_unref (vt_monitor->priv->event_queue);
- }
-
-+ if (vt_monitor->priv->restart_queue != NULL) {
-+ g_async_queue_unref (vt_monitor->priv->restart_queue);
-+ }
-+
- if (vt_monitor->priv->vt_thread_hash != NULL) {
- g_hash_table_destroy (vt_monitor->priv->vt_thread_hash);
- }