[Pkg-utopia-commits] r2958 - in /packages/unstable/consolekit/debian: ./ patches/

biebl at users.alioth.debian.org biebl at users.alioth.debian.org
Tue Mar 10 10:55:16 UTC 2009


Author: biebl
Date: Tue Mar 10 10:55:16 2009
New Revision: 2958

URL: http://svn.debian.org/wsvn/pkg-utopia/?sc=1&rev=2958
Log:
* Merge patches from Ubuntu
  - debian/patches/04-consolekit_park.patch (Closes: #489032)
  - debian/patches/05-pam-add-nox11.patch
  - debian/patches/08-fix-double-close.patch
  - debian/patches/09-directory-handle-leak.patch (Closes: #516532)
  - debian/patches/10-file_monitor_remove_watch_crash.patch
  - debian/patches/11-unref-dbus-proxy.patch
  - debian/patches/12-allow-get-sessions.patch

Added:
    packages/unstable/consolekit/debian/patches/04-consolekit_park.patch
    packages/unstable/consolekit/debian/patches/05-pam-add-nox11.patch
    packages/unstable/consolekit/debian/patches/08-fix-double-close.patch
    packages/unstable/consolekit/debian/patches/09-directory-handle-leak.patch
    packages/unstable/consolekit/debian/patches/10-file_monitor_remove_watch_crash.patch
    packages/unstable/consolekit/debian/patches/11-unref-dbus-proxy.patch
    packages/unstable/consolekit/debian/patches/12-allow-get-sessions.patch
Modified:
    packages/unstable/consolekit/debian/changelog
    packages/unstable/consolekit/debian/patches/series

Modified: packages/unstable/consolekit/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/changelog?rev=2958&op=diff
==============================================================================
--- packages/unstable/consolekit/debian/changelog (original)
+++ packages/unstable/consolekit/debian/changelog Tue Mar 10 10:55:16 2009
@@ -13,6 +13,14 @@
       A proper fix will be, to make ConsoleKit.xml actually valid XML.
   * debian/consolekit.docs
     - Update path to spec html file.
+  * Merge patches from Ubuntu
+    - debian/patches/04-consolekit_park.patch (Closes: #489032)
+    - debian/patches/05-pam-add-nox11.patch
+    - debian/patches/08-fix-double-close.patch
+    - debian/patches/09-directory-handle-leak.patch (Closes: #516532)
+    - debian/patches/10-file_monitor_remove_watch_crash.patch
+    - debian/patches/11-unref-dbus-proxy.patch
+    - debian/patches/12-allow-get-sessions.patch
 
  -- Michael Biebl <biebl at debian.org>  Tue, 03 Mar 2009 01:37:02 +0100
 

Added: packages/unstable/consolekit/debian/patches/04-consolekit_park.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/04-consolekit_park.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/04-consolekit_park.patch (added)
+++ packages/unstable/consolekit/debian/patches/04-consolekit_park.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,192 @@
+#
+# Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=11786
+#
+Index: consolekit-0.3/src/ck-manager.c
+===================================================================
+--- consolekit-0.3.orig/src/ck-manager.c	2008-09-23 20:56:46.000000000 +0200
++++ consolekit-0.3/src/ck-manager.c	2008-09-23 21:23:47.000000000 +0200
+@@ -30,6 +30,13 @@
+ #include <sys/types.h>
+ #include <errno.h>
+ #include <pwd.h>
++ #ifdef HAVE_PATHS_H
++ #include <paths.h>
++ #endif /* HAVE_PATHS_H */
++ 
++ #ifndef _PATH_TTY
++ #define _PATH_TTY "/dev/tty"
++ #endif
+ 
+ #include <glib.h>
+ #include <glib/gi18n.h>
+@@ -2370,6 +2377,41 @@
+         CkManager  *manager;
+ } RemoveLeaderData;
+ 
++gboolean
++ck_manager_set_x11_parking_place (CkManager             *manager,
++				  const char            *x11display,
++				  const char            *x11displaydevice,
++				  DBusGMethodInvocation *context)
++{
++        CkSeat  *seat;
++	guint    num;
++	gboolean res = FALSE;
++
++	g_debug ("x11display=%s device=%s", x11display, x11displaydevice);
++	
++	seat = g_hash_table_lookup (manager->priv->seats,
++				    CK_DBUS_PATH "/Seat1");
++	/* FIXME: this is rather unpleasantly hardcoded, but it
++	 * mirrors the code in find_seat_for_session - iwj */
++	if (seat == NULL) {
++		g_debug ("no seat");
++		goto xit;
++	}
++
++	if (sscanf (x11displaydevice, _PATH_TTY "%u", &num) != 1) {
++		g_debug ("bad device");
++		goto xit;
++	}
++
++	ck_seat_set_park_vt (seat, num);
++	res = TRUE;
++
++xit:
++        dbus_g_method_return (context, res);
++
++	return TRUE;
++}
++
+ static gboolean
+ remove_leader_for_connection (const char       *cookie,
+                               CkSessionLeader  *leader,
+Index: consolekit-0.3/src/ck-manager.h
+===================================================================
+--- consolekit-0.3.orig/src/ck-manager.h	2008-09-23 20:56:46.000000000 +0200
++++ consolekit-0.3/src/ck-manager.h	2008-09-23 21:23:47.000000000 +0200
+@@ -94,6 +94,10 @@
+ gboolean            ck_manager_close_session                  (CkManager             *manager,
+                                                                const char            *cookie,
+                                                                DBusGMethodInvocation *context);
++gboolean            ck_manager_set_x11_parking_place          (CkManager             *manager,
++                                                               const char            *x11display,
++                                                               const char            *x11displaydevice,
++                                                               DBusGMethodInvocation *context);
+ gboolean            ck_manager_get_current_session            (CkManager             *manager,
+                                                                DBusGMethodInvocation *context);
+ gboolean            ck_manager_get_session_for_cookie         (CkManager             *manager,
+Index: consolekit-0.3/src/ck-seat.c
+===================================================================
+--- consolekit-0.3.orig/src/ck-seat.c	2008-09-23 20:56:46.000000000 +0200
++++ consolekit-0.3/src/ck-seat.c	2008-09-23 21:23:47.000000000 +0200
+@@ -61,6 +61,8 @@
+         CkSession       *active_session;
+ 
+         CkVtMonitor     *vt_monitor;
++	guint           vt_park_num;
++        gboolean        vt_park_enable;
+ 
+         DBusGConnection *connection;
+ };
+@@ -498,9 +500,17 @@
+                 g_object_ref (session);
+                 ck_session_get_id (session, &ssid, NULL);
+                 ck_session_set_active (session, TRUE, NULL);
++		g_debug ("Active session changed: %s", ssid);
++         } else if (seat->priv->vt_park_enable) {
++		ck_seat_park (seat);
++		g_debug ("Active session: none - parking");
++	} else {
++                g_debug ("Active session: none and no parking");
+         }
+ 
+-        g_debug ("Active session changed: %s", ssid ? ssid : "(null)");
++        /* We park only once: enable is set when a session exits
++         * and cleared here when we choose a new session. */
++        seat->priv->vt_park_enable = FALSE;
+ 
+         g_signal_emit (seat, signals [ACTIVE_SESSION_CHANGED], 0, ssid);
+ 
+@@ -549,6 +559,33 @@
+         return TRUE;
+ }
+ 
++void
++ck_seat_park (CkSeat *seat)
++{
++        GError       *vt_error;
++	guint         num;
++	gboolean      ret;
++
++	num = seat->priv->vt_park_num;
++	g_debug ("Parking on VT %u", num);
++	if (num < 0) return;
++
++        vt_error = NULL;
++        ret = ck_vt_monitor_set_active (seat->priv->vt_monitor, num, &vt_error);
++	if (! ret) {
++                g_debug ("Unable to park: %s", vt_error->message);
++                g_error_free (vt_error);
++        }
++}
++
++void
++ck_seat_set_park_vt (CkSeat *seat, guint num)
++{
++	g_debug ("Parking place is VT %u", num);
++	
++	seat->priv->vt_park_num = num;
++}
++
+ gboolean
+ ck_seat_remove_session (CkSeat         *seat,
+                         CkSession      *session,
+@@ -592,6 +629,7 @@
+         g_signal_emit (seat, signals [SESSION_REMOVED], 0, ssid);
+ 
+         /* try to change the active session */
++        seat->priv->vt_park_enable = TRUE;
+         maybe_update_active_session (seat);
+ 
+         if (orig_session != NULL) {
+@@ -988,6 +1026,8 @@
+                                                       g_str_equal,
+                                                       g_free,
+                                                       (GDestroyNotify) g_object_unref);
++        seat->priv->vt_park_num = -1;
++        seat->priv->vt_park_enable = FALSE;
+         seat->priv->devices = g_ptr_array_new ();
+ }
+ 
+Index: consolekit-0.3/src/ck-seat.h
+===================================================================
+--- consolekit-0.3.orig/src/ck-seat.h	2008-09-23 20:56:46.000000000 +0200
++++ consolekit-0.3/src/ck-seat.h	2008-09-23 21:23:47.000000000 +0200
+@@ -133,6 +133,9 @@
+ gboolean            ck_seat_activate_session      (CkSeat                *seat,
+                                                    const char            *ssid,
+                                                    DBusGMethodInvocation *context);
++void                ck_seat_park                  (CkSeat                *seat);
++void                ck_seat_set_park_vt           (CkSeat                *seat,
++						   guint                  num);
+ 
+ G_END_DECLS
+ 
+Index: consolekit-0.3/src/org.freedesktop.ConsoleKit.Manager.xml
+===================================================================
+--- consolekit-0.3.orig/src/org.freedesktop.ConsoleKit.Manager.xml	2008-09-23 21:23:55.000000000 +0200
++++ consolekit-0.3/src/org.freedesktop.ConsoleKit.Manager.xml	2008-09-23 21:24:01.000000000 +0200
+@@ -133,6 +133,12 @@
+       </doc:doc>
+     </method>
+ 
++    <method name="SetX11ParkingPlace">
++      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
++      <arg name="x11display" direction="in" type="s"/>
++      <arg name="x11displaydevice" direction="in" type="s"/>
++    </method>
++
+     <method name="GetSeats">
+       <arg name="seats" direction="out" type="ao">
+         <doc:doc>

Added: packages/unstable/consolekit/debian/patches/05-pam-add-nox11.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/05-pam-add-nox11.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/05-pam-add-nox11.patch (added)
+++ packages/unstable/consolekit/debian/patches/05-pam-add-nox11.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,54 @@
+# Description: Add "nox11" option to the PAM module, which ignores PAM
+#   sessions where PAM_TTY is an X11 display. This allows adding
+#   pam_ck_connector to PAM's "common-session" without interfering
+#   with the already existing ConsoleKit operations in gdm, the
+#   Xsession script, etc.
+# Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=16746
+
+Index: consolekit-0.2.10/pam-ck-connector/pam-ck-connector.c
+===================================================================
+--- consolekit-0.2.10.orig/pam-ck-connector/pam-ck-connector.c	2008-08-04 18:23:37.000000000 +0200
++++ consolekit-0.2.10/pam-ck-connector/pam-ck-connector.c	2008-08-04 18:23:49.000000000 +0200
+@@ -63,6 +63,7 @@
+ #include "ck-connector.h"
+ 
+ static int opt_debug = FALSE;
++static int opt_nox11 = FALSE;
+ 
+ #ifndef HAVE_PAM_SYSLOG
+ 
+@@ -145,6 +146,8 @@
+         for (i = 0; i < argc && argv[i] != NULL; i++) {
+                 if (strcmp (argv[i] , "debug") == 0) {
+                         opt_debug = TRUE;
++                } else if (strcmp (argv[i] , "nox11") == 0) {
++                        opt_nox11 = TRUE;
+                 } else {
+                         ck_pam_syslog (pamh, LOG_ERR, "unknown option: %s", argv[i]);
+                 }
+@@ -276,6 +279,10 @@
+         x11_display = NULL;
+         /* interpret any tty with a colon as a DISPLAY */
+         if (strchr (display_device, ':') != NULL) {
++                if (opt_nox11) {
++                        ck_pam_syslog (pamh, LOG_WARNING, "nox11 mode, ignoring PAM_TTY %s", display_device);
++                        goto out;
++                }
+                 x11_display = display_device;
+                 display_device = "";
+         } else if (strncmp (_PATH_DEV, display_device, 5) != 0) {
+Index: consolekit-0.2.10/pam-ck-connector/pam_ck_connector.8
+===================================================================
+--- consolekit-0.2.10.orig/pam-ck-connector/pam_ck_connector.8	2008-08-04 18:23:44.000000000 +0200
++++ consolekit-0.2.10/pam-ck-connector/pam_ck_connector.8	2008-08-04 18:23:49.000000000 +0200
+@@ -66,6 +66,10 @@
+ .TP 3n
+ \fBdebug\fR
+ Print debug information.
++.TP 3n
++\fBnox11\fR
++Do not create a session if PAM specifies an X11 display instead of a
++/dev/tty terminal.
+ .fi
+ .RE
+ .sp

Added: packages/unstable/consolekit/debian/patches/08-fix-double-close.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/08-fix-double-close.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/08-fix-double-close.patch (added)
+++ packages/unstable/consolekit/debian/patches/08-fix-double-close.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,31 @@
+# Description: Fix double close of the log file (->file is an fdopen(->priv), which occasionally causes segfaults.
+# Ubuntu: https://bugs.launchpad.net/bugs/263245
+# Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=17866
+# Upstream: http://gitweb.freedesktop.org/?p=ConsoleKit.git;a=commitdiff;h=a58a4bff451dcf8a6019aed1b2fb276e9836b0f4
+--- a/src/ck-event-logger.c
++++ b/src/ck-event-logger.c
+@@ -180,8 +180,10 @@ retry:
+ static void
+ reopen_file_stream (CkEventLogger *event_logger)
+ {
+-        close (event_logger->priv->fd);
+-        fclose (event_logger->priv->file);
++        /* fclose will also close the underlying fd */
++        if (event_logger->priv->file != NULL) {
++                fclose (event_logger->priv->file);
++        }
+ 
+         /* FIXME: retries */
+         open_log_file (event_logger);
+@@ -420,8 +422,8 @@ ck_event_logger_finalize (GObject *objec
+                 g_async_queue_unref (event_logger->priv->event_queue);
+         }
+ 
+-        if (event_logger->priv->fd != -1) {
+-                close (event_logger->priv->fd);
++        if (event_logger->priv->file != NULL) {
++                fclose (event_logger->priv->file);
+         }
+ 
+         g_free (event_logger->priv->log_filename);
+

Added: packages/unstable/consolekit/debian/patches/09-directory-handle-leak.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/09-directory-handle-leak.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/09-directory-handle-leak.patch (added)
+++ packages/unstable/consolekit/debian/patches/09-directory-handle-leak.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,15 @@
+# Description: Close the directory handle when we're done with it, so that we aren't leaking file descriptors.
+# Ubuntu: https://launchpad.net/bugs/276918
+# Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=17893
+Index: consolekit-0.2.10/src/ck-run-programs.c
+===================================================================
+--- consolekit-0.2.10.orig/src/ck-run-programs.c
++++ consolekit-0.2.10/src/ck-run-programs.c
+@@ -225,6 +225,7 @@
+         out_loop:
+                 g_free (child_argv[0]);
+         }
++        g_dir_close (dir);
+ out:
+         g_strfreev (env_for_child);
+ }

Added: packages/unstable/consolekit/debian/patches/10-file_monitor_remove_watch_crash.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/10-file_monitor_remove_watch_crash.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/10-file_monitor_remove_watch_crash.patch (added)
+++ packages/unstable/consolekit/debian/patches/10-file_monitor_remove_watch_crash.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,249 @@
+# Description: Fix common crash when trying to remove a NULL watch
+# Ubuntu: https://launchpad.net/bugs/269651
+# Upstream: http://bugs.freedesktop.org/show_bug.cgi?id=18046
+Index: consolekit-0.2.10/src/ck-file-monitor-inotify.c
+===================================================================
+--- consolekit-0.2.10.orig/src/ck-file-monitor-inotify.c	2008-10-20 14:41:37.000000000 +0100
++++ consolekit-0.2.10/src/ck-file-monitor-inotify.c	2008-10-20 14:56:02.000000000 +0100
+@@ -55,7 +55,7 @@
+ 
+ typedef struct
+ {
+-        FileInotifyWatch  *watch;
++        gint               wd;
+         CkFileMonitorEvent event;
+         char              *path;
+ } FileMonitorEventInfo;
+@@ -80,7 +80,9 @@
+         guchar     *buffer;
+ 
+         guint       events_idle_id;
++        guint       remove_idle_id;
+         GQueue     *notify_events;
++        GQueue     *remove_events;
+ };
+ 
+ enum {
+@@ -242,6 +244,10 @@
+ file_monitor_remove_watch (CkFileMonitor    *monitor,
+                            FileInotifyWatch *watch)
+ {
++        if (watch->wd == -1) {
++                return;
++        }
++
+         g_hash_table_remove (monitor->priv->path_to_watch,
+                              watch->path);
+         g_hash_table_remove (monitor->priv->wd_to_watch,
+@@ -296,6 +302,7 @@
+ emit_events_in_idle (CkFileMonitor *monitor)
+ {
+         FileMonitorEventInfo *event_info;
++        gchar                *path, *freeme;
+ 
+         monitor->priv->events_idle_id = 0;
+ 
+@@ -303,29 +310,39 @@
+                 GSList           *l;
+                 FileInotifyWatch *watch;
+ 
+-                watch = event_info->watch;
+-
+-                for (l = watch->notifies; l != NULL; l = l->next) {
+-                        FileMonitorNotify *notify;
++                watch = g_hash_table_lookup (monitor->priv->wd_to_watch,
++                                             GINT_TO_POINTER (event_info->wd));
+ 
+-                        notify = g_hash_table_lookup (monitor->priv->notifies,
+-                                                      GUINT_TO_POINTER (l->data));
+-                        if (notify == NULL) {
+-                                continue;
+-                        }
+-
+-                        if (! (notify->mask & event_info->event)) {
+-                                continue;
+-                        }
+-
+-                        if (notify->notify_func) {
+-                                notify->notify_func (monitor, event_info->event, event_info->path, notify->user_data);
+-                        }
++                if (watch) {
++                    for (l = watch->notifies; l != NULL; l = l->next) {
++                            FileMonitorNotify *notify;
++
++                            notify = g_hash_table_lookup (monitor->priv->notifies,
++                                                          GUINT_TO_POINTER (l->data));
++                            if (notify == NULL) {
++                                    continue;
++                            }
++
++                            if (! (notify->mask & event_info->event)) {
++                                    continue;
++                            }
++
++                            if (notify->notify_func) {
++                                    freeme = NULL;
++                                    if (event_info->path) {
++                                            path = freeme = g_build_filename (watch->path, event_info->path, NULL);
++                                    } else {
++                                            path = watch->path;
++                                    }
++                                    notify->notify_func (monitor, event_info->event, path, notify->user_data);
++                                    if (freeme) {
++                                        g_free (freeme);
++                                    }
++                            }
++                    }
+                 }
+ 
+-                g_free (event_info->path);
+                 event_info->path = NULL;
+-
+                 event_info->event = CK_FILE_MONITOR_EVENT_NONE;
+ 
+                 g_free (event_info);
+@@ -334,6 +351,37 @@
+         return FALSE;
+ }
+ 
++static gboolean
++emit_removals_in_idle (CkFileMonitor *monitor)
++{
++        gint              wd;
++        FileInotifyWatch *watch;
++        GSList           *l;
++
++        monitor->priv->remove_idle_id = 0;
++
++        while ((wd = g_queue_pop_head (monitor->priv->remove_events)) != NULL) {
++                watch = g_hash_table_lookup (monitor->priv->wd_to_watch,
++                        GINT_TO_POINTER (wd));
++                if (watch && watch->wd != -1) {
++                    for (l = watch->notifies; l != NULL; l = l->next) {
++                            FileMonitorNotify *notify;
++
++                            notify = g_hash_table_lookup (monitor->priv->notifies,
++                                                          GUINT_TO_POINTER (l->data));
++                            if (notify == NULL) {
++                                    continue;
++                            }
++                            notify->watch = NULL;
++                    }
++                    file_monitor_remove_watch (monitor, watch);
++                    g_free (watch);
++                }
++        }
++
++        return FALSE;
++}
++
+ static void
+ file_monitor_queue_event (CkFileMonitor        *monitor,
+                           FileMonitorEventInfo *event_info)
+@@ -347,7 +395,7 @@
+ 
+ static void
+ queue_watch_event (CkFileMonitor     *monitor,
+-                   FileInotifyWatch  *watch,
++                   gint               wd,
+                    CkFileMonitorEvent event,
+                    const char        *path)
+ {
+@@ -355,7 +403,7 @@
+ 
+         event_info = g_new0 (FileMonitorEventInfo, 1);
+ 
+-        event_info->watch   = watch;
++        event_info->wd      = wd;
+         event_info->path    = g_strdup (path);
+         event_info->event   = event;
+ 
+@@ -363,8 +411,18 @@
+ }
+ 
+ static void
++queue_remove_event (CkFileMonitor *monitor,
++                    gint           wd)
++{
++        g_queue_push_tail (monitor->priv->remove_events, wd);
++
++        if (monitor->priv->remove_idle_id == 0) {
++                monitor->priv->remove_idle_id = g_idle_add ((GSourceFunc) emit_removals_in_idle, monitor);
++        }
++}
++
++static void
+ handle_inotify_event (CkFileMonitor        *monitor,
+-                      FileInotifyWatch     *watch,
+                       struct inotify_event *ievent)
+ {
+         CkFileMonitorEvent  event;
+@@ -375,9 +433,9 @@
+         freeme = NULL;
+ 
+         if (ievent->len > 0) {
+-                path = freeme = g_build_filename (watch->path, ievent->name, NULL);
++                path = ievent->name;
+         } else {
+-                path = watch->path;
++                path = NULL;
+         }
+ 
+         mask_str = imask_to_string (ievent->mask);
+@@ -397,11 +455,11 @@
+         }
+ 
+         if (event != CK_FILE_MONITOR_EVENT_NONE) {
+-                queue_watch_event (monitor, watch, event, path);
++                queue_watch_event (monitor, ievent->wd, event, path);
+         }
+ 
+         if (ievent->mask & IN_IGNORED) {
+-                file_monitor_remove_watch (monitor, watch);
++                queue_remove_event (monitor, ievent->wd);
+         }
+ }
+ 
+@@ -460,7 +518,7 @@
+                 watch = g_hash_table_lookup (monitor->priv->wd_to_watch,
+                                              GINT_TO_POINTER (ievent->wd));
+                 if (watch != NULL) {
+-                        handle_inotify_event (monitor, watch, ievent);
++                        handle_inotify_event (monitor, ievent);
+                 }
+ 
+                 i += sizeof (struct inotify_event) + ievent->len;
+@@ -523,11 +581,13 @@
+         g_hash_table_steal (monitor->priv->notifies,
+                             GUINT_TO_POINTER (id));
+ 
+-        notify->watch->notifies = g_slist_remove (notify->watch->notifies, GUINT_TO_POINTER (id));
++        if (notify->watch) {
++            notify->watch->notifies = g_slist_remove (notify->watch->notifies, GUINT_TO_POINTER (id));
+ 
+-        if (g_slist_length (notify->watch->notifies) == 0) {
+-                file_monitor_remove_watch (monitor, notify->watch);
+-                g_free (notify->watch);
++            if (g_slist_length (notify->watch->notifies) == 0) {
++                    file_monitor_remove_watch (monitor, notify->watch);
++                    g_free (notify->watch);
++            }
+         }
+ 
+         g_free (notify);
+@@ -629,6 +689,7 @@
+ 
+         monitor->priv->serial = 1;
+         monitor->priv->notify_events = g_queue_new ();
++        monitor->priv->remove_events = g_queue_new ();
+ 
+         setup_inotify (monitor);
+ }
+@@ -649,6 +710,7 @@
+ 
+         g_hash_table_destroy (monitor->priv->notifies);
+         g_queue_free (monitor->priv->notify_events);
++        g_queue_free (monitor->priv->remove_events);
+ 
+         G_OBJECT_CLASS (ck_file_monitor_parent_class)->finalize (object);
+ }

Added: packages/unstable/consolekit/debian/patches/11-unref-dbus-proxy.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/11-unref-dbus-proxy.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/11-unref-dbus-proxy.patch (added)
+++ packages/unstable/consolekit/debian/patches/11-unref-dbus-proxy.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,16 @@
+# Unref the dbus proxy when finalizing the session object, so that they are not leaked
+# Ubuntu: https://launchpad.net/bugs/284229
+# Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=18330
+Index: consolekit-0.3/src/ck-session.c
+===================================================================
+--- consolekit-0.3.orig/src/ck-session.c	2008-11-23 16:51:26.000000000 +0000
++++ consolekit-0.3/src/ck-session.c	2008-11-23 16:51:41.000000000 +0000
+@@ -1100,6 +1100,8 @@
+ 
+         session_remove_activity_watch (session);
+ 
++        g_object_unref (session->priv->bus_proxy);
++
+         g_free (session->priv->id);
+         g_free (session->priv->cookie);
+         g_free (session->priv->seat_id);

Added: packages/unstable/consolekit/debian/patches/12-allow-get-sessions.patch
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/12-allow-get-sessions.patch?rev=2958&op=file
==============================================================================
--- packages/unstable/consolekit/debian/patches/12-allow-get-sessions.patch (added)
+++ packages/unstable/consolekit/debian/patches/12-allow-get-sessions.patch Tue Mar 10 10:55:16 2009
@@ -1,0 +1,13 @@
+diff -ur ConsoleKit-0.3.0/data/ConsoleKit.conf ConsoleKit-ted/data/ConsoleKit.conf
+--- ConsoleKit-0.3.0/data/ConsoleKit.conf	2009-03-04 14:02:53.000000000 -0600
++++ ConsoleKit-ted/data/ConsoleKit.conf	2009-03-04 14:03:21.000000000 -0600
+@@ -41,6 +41,9 @@
+            send_member="GetSeats"/>
+     <allow send_destination="org.freedesktop.ConsoleKit"
+            send_interface="org.freedesktop.ConsoleKit.Manager"
++           send_member="GetSessions"/>
++    <allow send_destination="org.freedesktop.ConsoleKit"
++           send_interface="org.freedesktop.ConsoleKit.Manager"
+            send_member="GetSessionForCookie"/>
+     <allow send_destination="org.freedesktop.ConsoleKit"
+            send_interface="org.freedesktop.ConsoleKit.Manager"

Modified: packages/unstable/consolekit/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-utopia/packages/unstable/consolekit/debian/patches/series?rev=2958&op=diff
==============================================================================
--- packages/unstable/consolekit/debian/patches/series (original)
+++ packages/unstable/consolekit/debian/patches/series Tue Mar 10 10:55:16 2009
@@ -1,4 +1,11 @@
 03-cleanup_console_tags.patch
+04-consolekit_park.patch
 04-defer_daemonizing.patch
 05-dbus_policy.patch
+05-pam-add-nox11.patch
 06-xmlto_skip_validation.patch
+08-fix-double-close.patch
+09-directory-handle-leak.patch
+10-file_monitor_remove_watch_crash.patch
+11-unref-dbus-proxy.patch
+12-allow-get-sessions.patch




More information about the Pkg-utopia-commits mailing list