make signal-handling patch work with older glib versions
This commit is contained in:
parent
7abb3de37c
commit
8afb02d876
@ -1,11 +1,21 @@
|
|||||||
From 54a700c45c81f1ffff5f3dfcecb3929143e31d48 Mon Sep 17 00:00:00 2001
|
From 3b5d3b7e1f320b0bfbe48024a586c0a22375aa2d Mon Sep 17 00:00:00 2001
|
||||||
From: Nils Philippsen <nils@redhat.com>
|
From: Nils Philippsen <nils@redhat.com>
|
||||||
Date: Wed, 19 Mar 2014 13:23:16 +0100
|
Date: Thu, 3 Jul 2014 10:38:03 +0200
|
||||||
Subject: [PATCH] patch: signal-handling
|
Subject: [PATCH] patch: signal-handling
|
||||||
|
|
||||||
Squashed commit of the following:
|
Squashed commit of the following:
|
||||||
|
|
||||||
commit 2b629e1d9c60dcf26defe6d05b515611874db270
|
commit 1e9e8cf5edc469114c8eadf46817cd5c1261b35c
|
||||||
|
Author: Nils Philippsen <nils@redhat.com>
|
||||||
|
Date: Thu Jul 3 10:14:52 2014 +0200
|
||||||
|
|
||||||
|
don't use g_unix_open_pipe(), g_unix_fd_add()
|
||||||
|
|
||||||
|
These functions have only recently been added to glib. Use pipe()/
|
||||||
|
fcntl() and g_io_channel_unix_new()/g_io_add_watch() instead which are
|
||||||
|
available in the minimum glib version needed for gtk+-2.x.
|
||||||
|
|
||||||
|
commit acbdf3f693d3d2a78ee7490ca1bf76957daf00cf
|
||||||
Author: Nils Philippsen <nils@redhat.com>
|
Author: Nils Philippsen <nils@redhat.com>
|
||||||
Date: Thu Mar 13 13:38:12 2014 +0100
|
Date: Thu Mar 13 13:38:12 2014 +0100
|
||||||
|
|
||||||
@ -16,13 +26,13 @@ Date: Thu Mar 13 13:38:12 2014 +0100
|
|||||||
non-reentrant functions from a signal handler. The top half (the real
|
non-reentrant functions from a signal handler. The top half (the real
|
||||||
signal handler) just writes a character into a pipe which gets picked up
|
signal handler) just writes a character into a pipe which gets picked up
|
||||||
and serviced by the bottom half from the normal event loop, this
|
and serviced by the bottom half from the normal event loop, this
|
||||||
serializes things and makes use of non-reentrant functions safe.
|
serializes things and makes using non-reentrant functions safe.
|
||||||
---
|
---
|
||||||
src/xsane.c | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
|
src/xsane.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------
|
||||||
1 file changed, 131 insertions(+), 15 deletions(-)
|
1 file changed, 136 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
diff --git a/src/xsane.c b/src/xsane.c
|
diff --git a/src/xsane.c b/src/xsane.c
|
||||||
index eee76ff..02b4da4 100644
|
index 2b9211b..fc2ebbe 100644
|
||||||
--- a/src/xsane.c
|
--- a/src/xsane.c
|
||||||
+++ b/src/xsane.c
|
+++ b/src/xsane.c
|
||||||
@@ -47,6 +47,7 @@
|
@@ -47,6 +47,7 @@
|
||||||
@ -48,7 +58,7 @@ index eee76ff..02b4da4 100644
|
|||||||
-static RETSIGTYPE xsane_quit_handler(int signal);
|
-static RETSIGTYPE xsane_quit_handler(int signal);
|
||||||
-static RETSIGTYPE xsane_sigchld_handler(int signal);
|
-static RETSIGTYPE xsane_sigchld_handler(int signal);
|
||||||
+static RETSIGTYPE xsane_signal_handler_top_half(int signal);
|
+static RETSIGTYPE xsane_signal_handler_top_half(int signal);
|
||||||
+static gboolean xsane_signal_handler_bottom_half(gint fd,
|
+static gboolean xsane_signal_handler_bottom_half(GIOChannel *source,
|
||||||
+ GIOCondition condition,
|
+ GIOCondition condition,
|
||||||
+ gpointer user_data);
|
+ gpointer user_data);
|
||||||
+static void xsane_sigchld_handler(void);
|
+static void xsane_sigchld_handler(void);
|
||||||
@ -119,7 +129,7 @@ index eee76ff..02b4da4 100644
|
|||||||
+ errno = errno_saved;
|
+ errno = errno_saved;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static gboolean xsane_signal_handler_bottom_half(gint fd,
|
+static gboolean xsane_signal_handler_bottom_half(GIOChannel *source,
|
||||||
+ GIOCondition condition,
|
+ GIOCondition condition,
|
||||||
+ gpointer user_data)
|
+ gpointer user_data)
|
||||||
+{
|
+{
|
||||||
@ -162,7 +172,7 @@ index eee76ff..02b4da4 100644
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* previous invocation might have read more than it should, so ignore
|
+ /* previous invocation might have read more than it should, so ignore
|
||||||
+ * EGAIN/EWOULDBLOCK */
|
+ * EAGAIN/EWOULDBLOCK */
|
||||||
+ if (readlen < 0 && errno != EAGAIN && errno != EWOULDBLOCK)
|
+ if (readlen < 0 && errno != EAGAIN && errno != EWOULDBLOCK)
|
||||||
+ {
|
+ {
|
||||||
+ DBG(DBG_error, "Error while reading from pipe: %d '%s'\n", errno,
|
+ DBG(DBG_error, "Error while reading from pipe: %d '%s'\n", errno,
|
||||||
@ -179,14 +189,26 @@ index eee76ff..02b4da4 100644
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
XsaneChildprocess **childprocess_listptr = &xsane.childprocess_list;
|
XsaneChildprocess **childprocess_listptr = &xsane.childprocess_list;
|
||||||
@@ -6062,18 +6170,26 @@ void xsane_interface(int argc, char **argv)
|
@@ -6026,6 +6134,8 @@ void xsane_interface(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct SIGACTION act;
|
||||||
|
|
||||||
|
+ GIOChannel *gio_pipe_read;
|
||||||
|
+
|
||||||
|
DBG(DBG_proc, "xsane_interface\n");
|
||||||
|
|
||||||
|
xsane.info_label = NULL;
|
||||||
|
@@ -6069,18 +6179,29 @@ void xsane_interface(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (!g_unix_open_pipe(xsane_signal_pipe, FD_CLOEXEC, NULL) ||
|
+ if ((pipe(xsane_signal_pipe) == -1) ||
|
||||||
+ fcntl(xsane_signal_pipe[0], F_SETFL, O_NONBLOCK, 1) ||
|
+ (fcntl(xsane_signal_pipe[0], F_SETFD, FD_CLOEXEC) == -1) ||
|
||||||
+ fcntl(xsane_signal_pipe[1], F_SETFL, O_NONBLOCK, 1) ||
|
+ (fcntl(xsane_signal_pipe[0], F_SETFL, O_NONBLOCK) == -1) ||
|
||||||
+ !g_unix_fd_add(xsane_signal_pipe[0], G_IO_IN | G_IO_PRI,
|
+ (fcntl(xsane_signal_pipe[1], F_SETFD, FD_CLOEXEC) == -1) ||
|
||||||
|
+ (fcntl(xsane_signal_pipe[1], F_SETFL, O_NONBLOCK) == -1) ||
|
||||||
|
+ !(gio_pipe_read = g_io_channel_unix_new(xsane_signal_pipe[0])) ||
|
||||||
|
+ !g_io_add_watch(gio_pipe_read, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI,
|
||||||
+ xsane_signal_handler_bottom_half, NULL))
|
+ xsane_signal_handler_bottom_half, NULL))
|
||||||
+ {
|
+ {
|
||||||
+ DBG(DBG_error,
|
+ DBG(DBG_error,
|
||||||
@ -216,5 +238,5 @@ index eee76ff..02b4da4 100644
|
|||||||
gtk_main();
|
gtk_main();
|
||||||
sane_exit();
|
sane_exit();
|
||||||
--
|
--
|
||||||
1.8.5.3
|
1.9.3
|
||||||
|
|
||||||
|
19
xsane.spec
19
xsane.spec
@ -61,16 +61,16 @@ Patch11: xsane-0.999-pdf-no-high-bpp.patch
|
|||||||
# build against lcms 2.x
|
# build against lcms 2.x
|
||||||
# submitted to upstream (Oliver Rauch) via email, 2013-09-23
|
# submitted to upstream (Oliver Rauch) via email, 2013-09-23
|
||||||
Patch12: xsane-0.999-lcms2.patch
|
Patch12: xsane-0.999-lcms2.patch
|
||||||
# fix signal handling (#1073698)
|
|
||||||
# submitted to upstream (Oliver Rauch) via email, 2014-03-19
|
|
||||||
Patch13: xsane-0.999-signal-handling.patch
|
|
||||||
# fix issues found during static analysis that don't require far-reaching
|
# fix issues found during static analysis that don't require far-reaching
|
||||||
# refactoring
|
# refactoring
|
||||||
# submitted to upstream (Oliver Rauch) via email, 2014-04-02
|
# submitted to upstream (Oliver Rauch) via email, 2014-04-02
|
||||||
Patch14: xsane-0.999-coverity.patch
|
Patch13: xsane-0.999-coverity.patch
|
||||||
# update lib/snprintf.c to the latest version from LPRng that has a Free license
|
# update lib/snprintf.c to the latest version from LPRng that has a Free license
|
||||||
# submitted to upstream (Oliver Rauch) via email, 2014-05-29
|
# submitted to upstream (Oliver Rauch) via email, 2014-05-29
|
||||||
Patch15: xsane-0.999-update-to-current-lprng-plp_snprintf.patch
|
Patch14: xsane-0.999-update-to-current-lprng-plp_snprintf.patch
|
||||||
|
# fix signal handling (#1073698)
|
||||||
|
# submitted to upstream (Oliver Rauch) via email, 2014-07-03
|
||||||
|
Patch15: xsane-0.999-signal-handling.patch
|
||||||
|
|
||||||
# autoconf-generated files
|
# autoconf-generated files
|
||||||
Patch100: xsane-0.999-7-autoconf.patch.bz2
|
Patch100: xsane-0.999-7-autoconf.patch.bz2
|
||||||
@ -137,9 +137,9 @@ done
|
|||||||
%patch10 -p1 -b .man-page
|
%patch10 -p1 -b .man-page
|
||||||
%patch11 -p1 -b .pdf-no-high-bpp
|
%patch11 -p1 -b .pdf-no-high-bpp
|
||||||
%patch12 -p1 -b .lcms2
|
%patch12 -p1 -b .lcms2
|
||||||
%patch13 -p1 -b .signal-handling
|
%patch13 -p1 -b .coverity
|
||||||
%patch14 -p1 -b .coverity
|
%patch14 -p1 -b .snprintf
|
||||||
%patch15 -p1 -b .snprintf
|
%patch15 -p1 -b .signal-handling
|
||||||
|
|
||||||
%patch100 -p1 -b .autoconf
|
%patch100 -p1 -b .autoconf
|
||||||
|
|
||||||
@ -239,6 +239,9 @@ fi
|
|||||||
%{_datadir}/sane/xsane
|
%{_datadir}/sane/xsane
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jul 03 2014 Nils Philippsen <nils@redhat.com>
|
||||||
|
- make signal-handling patch work with older glib versions
|
||||||
|
|
||||||
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.999-14
|
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.999-14
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user