diff --git a/cups-dbus-notifier.patch b/cups-dbus-notifier.patch new file mode 100644 index 0000000..f550888 --- /dev/null +++ b/cups-dbus-notifier.patch @@ -0,0 +1,103 @@ +diff -up cups-1.6.4/notifier/dbus.c.dbus-notifier cups-1.6.4/notifier/dbus.c +--- cups-1.6.4/notifier/dbus.c.dbus-notifier 2013-11-14 18:05:25.840670705 +0000 ++++ cups-1.6.4/notifier/dbus.c 2013-11-14 18:05:56.361814538 +0000 +@@ -4,7 +4,7 @@ + * D-Bus notifier for CUPS. + * + * Copyright 2008-2011 by Apple Inc. +- * Copyright (C) 2011 Red Hat, Inc. ++ * Copyright (C) 2011, 2013 Red Hat, Inc. + * Copyright (C) 2007 Tim Waugh + * Copyright 1997-2005 by Easy Software Products. + * +@@ -157,9 +157,16 @@ enum + + + /* ++ * Global variables... ++ */ ++ ++static char lock_filename[1024]; /* Lock filename */ ++ ++/* + * Local functions... + */ + ++static void release_lock(void); + static int acquire_lock(int *fd, char *lockfile, size_t locksize); + static const char *validate_utf8(const char *str); + +@@ -251,8 +258,6 @@ main(int argc, /* I - Number of comm + DBusMessage *message; /* Message to send */ + DBusMessageIter iter; /* Iterator for message data */ + int lock_fd = -1; /* Lock file descriptor */ +- char lock_filename[1024]; +- /* Lock filename */ + + + /* +@@ -651,7 +656,7 @@ main(int argc, /* I - Number of comm + if (lock_fd >= 0) + { + close(lock_fd); +- unlink(lock_filename); ++ release_lock(); + } + + return (0); +@@ -659,6 +664,26 @@ main(int argc, /* I - Number of comm + + + /* ++ * 'release_lock()' - Release the singleton lock. ++ */ ++ ++static void ++release_lock(void) ++{ ++ unlink(lock_filename); ++} ++ ++ ++/* ++ * 'handle_sigterm()' - Handle SIGTERM signal. ++ */ ++static void ++handle_sigterm(int signum) ++{ ++ release_lock(); ++} ++ ++/* + * 'acquire_lock()' - Acquire a lock so we only have a single notifier running. + */ + +@@ -667,7 +692,8 @@ acquire_lock(int *fd, /* O - Lock fi + char *lockfile, /* I - Lock filename buffer */ + size_t locksize) /* I - Size of filename buffer */ + { +- const char *tmpdir; /* Temporary directory */ ++ const char *tmpdir; /* Temporary directory */ ++ struct sigaction action; /* POSIX sigaction data */ + + + /* +@@ -685,8 +711,16 @@ acquire_lock(int *fd, /* O - Lock fi + + if ((*fd = open(lockfile, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0) + return (-1); +- else +- return (0); ++ ++ /* ++ * Set a SIGTERM handler to make sure we release the lock if the ++ * scheduler decides to stop us. ++ */ ++ memset(&action, 0, sizeof(action)); ++ action.sa_handler = handle_sigterm; ++ sigaction(SIGTERM, &action, NULL); ++ ++ return (0); + } + #else /* !HAVE_DBUS */ + int diff --git a/cups.spec b/cups.spec index 8d716c6..d81e467 100644 --- a/cups.spec +++ b/cups.spec @@ -11,7 +11,7 @@ Summary: CUPS printing system Name: cups Epoch: 1 Version: 1.6.4 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Group: System Environment/Daemons Url: http://www.cups.org/ @@ -67,6 +67,7 @@ Patch36: cups-ipp-multifile.patch Patch37: cups-full-relro.patch Patch38: cups-web-devices-timeout.patch Patch39: cups-final-content-type.patch +Patch40: cups-dbus-notifier.patch Patch100: cups-lspp.patch @@ -261,6 +262,8 @@ Sends IPP requests to the specified URI and tests and/or displays the results. # Reverted upstream change to FINAL_CONTENT_TYPE in order to fix # printing to remote CUPS servers (bug #1010580). %patch39 -p1 -b .final-content-type +# Avoid stale lockfile in dbus notifier (bug #1026949). +%patch40 -p1 -b .dbus-notifier %if %lspp # LSPP support. @@ -649,6 +652,9 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man5/ipptoolfile.5.gz %changelog +* Thu Nov 14 2013 Tim Waugh - 1:1.6.4-3 +- Avoid stale lockfile in dbus notifier (bug #1026949). + * Fri Sep 27 2013 Tim Waugh - 1:1.6.4-2 - Reverted upstream change to FINAL_CONTENT_TYPE in order to fix printing to remote CUPS servers (bug #1010580).