Bug#681885: unblock: ivykis/0.30.1-2
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: freeze-exception
Please unblock package ivykis
While a new upstream version, it's a bug-fix release, containing
important upstream fixes (none reported to Debian, so no bug numbers
at present), and a minor packaging fix.
The most important of these are explained in the changelog aswell, but
for convenience, I'll repeat them here, with a bit more information
added to make it easier to decide whether to unblock the package.
The fixes are:
- 0.30 (currently in testing) introduced a regression, that could
easily result in a deadlock when under moderate load. The situation
and the fix is - I believe - well explained in the comment in
iv_work.c (see the attached debdiff)
- The kqueue polling method had an uninitialized variable, which lead
to strange situations - including possible assertions - on
kFreeBSD. (fix in iv_method_kqueue.c)
- Various minor/possible memory leak fixes, best explained by
upstream commit messages:
https://github.com/buytenh/ivykis/commit/3124a2c6b082054ee6418a195327c6e7b20529f3
https://github.com/buytenh/ivykis/commit/d785caf58b25d2304d1aba9439fe20a5a76d76ee
- A workaround for an event registration problem, triggered by
syslog-ng. Without this workaround, it's fairly inconvenient to
register fds with ivykis, and the application would need to go to
great lengths to ensure everything is proper. A needless dance,
since ivykis - with this fix - can do the same thing more
efficiently.
- And last but not least, ivykis Breaks/Replaces libsyslog-ng-dev,
because former versions (including 3.3.5 currently in testing &
unstable) included a patched ivykis, and installed its headers
too. Starting with 3.3.6, syslog-ng will stop doing that, and use the
ivykis package instead.
However, after ivykis 0.30.1-2 was uploaded to unstable, syslog-ng
3.3.5.90 (a 3.3.6 RC) was released, and 3rd party Debian packages
were made for that release too.
To make the life of users of those packages, and my own, I lowered
the Breaks/Replaces to << 3.3.5.90~ (from the former << 3.3.6~).
It's a trivial fix that does not affect Debian at all, but it'd be
nice to have nevertheless.
There are currently no packages in Debian that either depend or
build-depend on ivykis, therefore I'd consider the above changes
no-risk and very safe. We've also went to great lengths with upstream
to make sure that 0.30.1 is suitable for Debian Stable, and that every
fix in it is well justified.
(The debdiff also has a bit of noise, as 0.30-1 had two patches
cherry-picked from upstream, which have been integrated in the new
version.)
unblock ivykis/0.30.1-2
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
--
|8]
diff -Nru ivykis-0.30/configure.ac ivykis-0.30.1/configure.ac
--- ivykis-0.30/configure.ac 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/configure.ac 2012-07-02 21:14:58.000000000 +0200
@@ -1,5 +1,5 @@
AC_PREREQ(2.59)
-AC_INIT([ivykis], [0.30], [libivykis-discuss@lists.sourceforge.net])
+AC_INIT([ivykis], [0.30.1], [libivykis-discuss@lists.sourceforge.net])
AC_CONFIG_SRCDIR([lib/iv_main.c])
AC_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([foreign])
diff -Nru ivykis-0.30/debian/changelog ivykis-0.30.1/debian/changelog
--- ivykis-0.30/debian/changelog 2012-06-23 09:06:12.000000000 +0200
+++ ivykis-0.30.1/debian/changelog 2012-07-05 12:50:27.000000000 +0200
@@ -1,3 +1,19 @@
+ivykis (0.30.1-2) unstable; urgency=low
+
+ * Ligthen the Breaks/Replaces on libsyslog-ng-dev, and B/R on versions
+ prior to 3.3.5.90 instead of 3.3.6.
+
+ -- Gergely Nagy <algernon@madhouse-project.org> Thu, 05 Jul 2012 12:49:32 +0200
+
+ivykis (0.30.1-1) unstable; urgency=low
+
+ * New upstream bugfix release:
+ + Fix a possible deadlock situation, introduced in 0.30.
+ + Work around iv_fd_register_try() being called without handlers
+ (triggered by syslog-ng)
+
+ -- Gergely Nagy <algernon@madhouse-project.org> Tue, 03 Jul 2012 20:13:39 +0200
+
ivykis (0.30-1) unstable; urgency=low
* New upstream release.
diff -Nru ivykis-0.30/debian/control ivykis-0.30.1/debian/control
--- ivykis-0.30/debian/control 2012-06-23 09:06:12.000000000 +0200
+++ ivykis-0.30.1/debian/control 2012-07-05 12:50:27.000000000 +0200
@@ -29,8 +29,8 @@
Section: libdevel
Architecture: any
Depends: libivykis0 (= ${binary:Version}), ${misc:Depends}
-Breaks: libsyslog-ng-dev (<< 3.3.6~)
-Replaces: libsyslog-ng-dev (<< 3.3.6~)
+Breaks: libsyslog-ng-dev (<< 3.3.5.90~)
+Replaces: libsyslog-ng-dev (<< 3.3.5.90~)
Description: Development libraries, header files and docs for libivykis
Contains the header files, documentation, examples and static
libraries for use in developing applications that use the libivykis
diff -Nru ivykis-0.30/debian/patches/0001-iv_fatal-Don-t-pass-in-error-message-as-a-format-str.patch ivykis-0.30.1/debian/patches/0001-iv_fatal-Don-t-pass-in-error-message-as-a-format-str.patch
--- ivykis-0.30/debian/patches/0001-iv_fatal-Don-t-pass-in-error-message-as-a-format-str.patch 2012-06-23 09:08:11.000000000 +0200
+++ ivykis-0.30.1/debian/patches/0001-iv_fatal-Don-t-pass-in-error-message-as-a-format-str.patch 1970-01-01 01:00:00.000000000 +0100
@@ -1,38 +0,0 @@
-From b58b132817fbd27677eff7802fc8595da7d02ae5 Mon Sep 17 00:00:00 2001
-From: Gergely Nagy <algernon@balabit.hu>
-Date: Fri, 22 Jun 2012 22:53:56 +0200
-Subject: [PATCH] iv_fatal: Don't pass in error message as a format string to
- syslog(3).
-
-Instead of calling syslog(3) as:
-
- syslog(LOG_CRIT, msg);
-
-we should call it as:
-
- syslog(LOG_CRIT, "%s", msg);
-
-as the former variant treats the error message as a format string,
-which is potentially unsafe.
-
-Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
----
- lib/iv_main.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/iv_main.c b/lib/iv_main.c
-index 74cec15..5aad9ba 100644
---- a/lib/iv_main.c
-+++ b/lib/iv_main.c
-@@ -301,7 +301,7 @@ void iv_fatal(const char *fmt, ...)
- if (fatal_msg_handler != NULL)
- fatal_msg_handler(msg);
- else
-- syslog(LOG_CRIT, msg);
-+ syslog(LOG_CRIT, "%s", msg);
-
- abort();
- }
---
-1.7.10
-
diff -Nru ivykis-0.30/debian/patches/0002-Makefile.am-Apply-forgotten-current-age-shared-libra.patch ivykis-0.30.1/debian/patches/0002-Makefile.am-Apply-forgotten-current-age-shared-libra.patch
--- ivykis-0.30/debian/patches/0002-Makefile.am-Apply-forgotten-current-age-shared-libra.patch 2012-06-23 09:08:11.000000000 +0200
+++ ivykis-0.30.1/debian/patches/0002-Makefile.am-Apply-forgotten-current-age-shared-libra.patch 1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-From d0f9314ccdbe89de70bb94cd7a080b71d861c1ed Mon Sep 17 00:00:00 2001
-From: Gergely Nagy <algernon@balabit.hu>
-Date: Fri, 22 Jun 2012 23:10:11 +0200
-Subject: [PATCH] Makefile.am: Apply forgotten current+age shared library
- version bump.
-
-Corresponding to the addition of iv_fatal()/iv_set_fatal_msg_handler().
-
-Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
----
- Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 2f49510..9bb785f 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -6,7 +6,7 @@ lib_LTLIBRARIES = libivykis.la
-
- libivykis_la_SOURCES =
- libivykis_la_LIBADD = lib/libivykis.la modules/libivykis-modules.la
--libivykis_la_LDFLAGS = -version-info 0:0:0
-+libivykis_la_LDFLAGS = -version-info 1:0:1
-
- if HAVE_VERSIONING
- libivykis_la_LDFLAGS += -Wl,--version-script,${srcdir}/libivykis.ver
---
-1.7.10
-
diff -Nru ivykis-0.30/debian/patches/series ivykis-0.30.1/debian/patches/series
--- ivykis-0.30/debian/patches/series 2012-06-23 09:08:11.000000000 +0200
+++ ivykis-0.30.1/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-# debian/source/git-patches exported from git by quilt-patches-deb-export-hook
-0001-iv_fatal-Don-t-pass-in-error-message-as-a-format-str.patch
-0002-Makefile.am-Apply-forgotten-current-age-shared-libra.patch
diff -Nru ivykis-0.30/debian/source/git-patches ivykis-0.30.1/debian/source/git-patches
--- ivykis-0.30/debian/source/git-patches 2012-06-23 09:06:12.000000000 +0200
+++ ivykis-0.30.1/debian/source/git-patches 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-v$UPSTREAM_REF-trunk..debian/patched/$DEB_REF
diff -Nru ivykis-0.30/lib/iv_fd.c ivykis-0.30.1/lib/iv_fd.c
--- ivykis-0.30/lib/iv_fd.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/lib/iv_fd.c 2012-07-02 21:14:58.000000000 +0200
@@ -162,18 +162,28 @@
{
struct iv_state *st = iv_get_state();
struct iv_fd_ *fd = (struct iv_fd_ *)_fd;
+ int orig_wanted_bands;
int ret;
iv_fd_register_prologue(st, fd);
recompute_wanted_flags(fd);
+ orig_wanted_bands = fd->wanted_bands;
+ if (!fd->wanted_bands)
+ fd->wanted_bands = MASKIN | MASKOUT;
+
ret = method->notify_fd_sync(st, fd);
if (ret) {
fd->registered = 0;
return ret;
}
+ if (!orig_wanted_bands) {
+ fd->wanted_bands = 0;
+ method->notify_fd(st, fd);
+ }
+
iv_fd_register_epilogue(st, fd);
return 0;
diff -Nru ivykis-0.30/lib/iv_main.c ivykis-0.30.1/lib/iv_main.c
--- ivykis-0.30/lib/iv_main.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/lib/iv_main.c 2012-07-02 21:14:58.000000000 +0200
@@ -301,7 +301,7 @@
if (fatal_msg_handler != NULL)
fatal_msg_handler(msg);
else
- syslog(LOG_CRIT, msg);
+ syslog(LOG_CRIT, "%s", msg);
abort();
}
diff -Nru ivykis-0.30/lib/iv_method_kqueue.c ivykis-0.30.1/lib/iv_method_kqueue.c
--- ivykis-0.30/lib/iv_method_kqueue.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/lib/iv_method_kqueue.c 2012-07-02 21:14:58.000000000 +0200
@@ -206,7 +206,7 @@
static int iv_kqueue_notify_fd_sync(struct iv_state *st, struct iv_fd_ *fd)
{
struct kevent kev[2];
- int num;
+ int num = 0;
int ret;
iv_kqueue_queue_one(kev, &num, fd);
diff -Nru ivykis-0.30/Makefile.am ivykis-0.30.1/Makefile.am
--- ivykis-0.30/Makefile.am 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/Makefile.am 2012-07-02 21:14:58.000000000 +0200
@@ -6,7 +6,7 @@
libivykis_la_SOURCES =
libivykis_la_LIBADD = lib/libivykis.la modules/libivykis-modules.la
-libivykis_la_LDFLAGS = -version-info 0:0:0
+libivykis_la_LDFLAGS = -version-info 1:1:1
if HAVE_VERSIONING
libivykis_la_LDFLAGS += -Wl,--version-script,${srcdir}/libivykis.ver
diff -Nru ivykis-0.30/modules/iv_thread.c ivykis-0.30.1/modules/iv_thread.c
--- ivykis-0.30/modules/iv_thread.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/modules/iv_thread.c 2012-07-02 21:14:58.000000000 +0200
@@ -184,6 +184,7 @@
out:
iv_event_unregister(&thr->dead);
+ free(thr->name);
free(thr);
if (iv_thread_debug)
diff -Nru ivykis-0.30/modules/iv_wait.c ivykis-0.30.1/modules/iv_wait.c
--- ivykis-0.30/modules/iv_wait.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/modules/iv_wait.c 2012-07-02 21:14:58.000000000 +0200
@@ -219,9 +219,6 @@
}
free(we);
-
- if (tinfo->handled_wait_interest == NULL)
- break;
}
tinfo->handled_wait_interest = NULL;
diff -Nru ivykis-0.30/modules/iv_work.c ivykis-0.30.1/modules/iv_work.c
--- ivykis-0.30/modules/iv_work.c 2012-06-22 18:23:52.000000000 +0200
+++ ivykis-0.30.1/modules/iv_work.c 2012-07-02 21:14:58.000000000 +0200
@@ -119,6 +119,17 @@
} else {
__iv_work_thread_die(thr);
}
+ } else {
+ /*
+ * If we're already at the maximum number of pool
+ * threads, and none of those threads were idle when
+ * more work arrived, then there may have been no
+ * kick sent for the new work item(s) (and no new
+ * pool thread started either), so if we're leaving
+ * with work items still pending, kick ourselves by
+ * hand, to make sure we don't deadlock.
+ */
+ iv_event_post(&thr->kick);
}
pthread_mutex_unlock(&pool->lock);
Reply to: