Package: release.debian.org Severity: normal User: [email protected] Usertags: unblock
Please unblock package xapian-core This update contains the following changes compared to the version currently in testing (1.2.12-1): Fixes grave bug http://bugs.debian.org/695542 ("Concurrent threads can succeed in locking database"). Fixes bug http://bugs.debian.org/695643 ("Database replication fails for files > 32GB") which is a small and safe patch relevant to the LFS release goal: http://wiki.debian.org/ReleaseGoals/LFS I've attached a debdiff against 1.2.12-1 (currently in testing), and for your reviewing convenience, the two new patches individually. Cheers, Olly unblock xapian-core/1.2.12-2 -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 3.2.0-4-amd64 (SMP w/8 CPU cores) Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
diff -Nru xapian-core-1.2.12/debian/changelog xapian-core-1.2.12/debian/changelog --- xapian-core-1.2.12/debian/changelog 2012-06-28 19:54:11.000000000 +1200 +++ xapian-core-1.2.12/debian/changelog 2012-12-11 17:22:23.000000000 +1300 @@ -1,3 +1,13 @@ +xapian-core (1.2.12-2) unstable; urgency=low + + * New patch fix-db-write-lock.patch which fixes database write locking to + work when the lock file is already open in the same process. + (Closes: #695542) + * New patch replication-above-32GB.patch which fixes database replication to + handle files > 32GB. (Closes: #695643) + + -- Olly Betts <[email protected]> Tue, 11 Dec 2012 04:22:04 +0000 + xapian-core (1.2.12-1) unstable; urgency=low * New upstream release. diff -Nru xapian-core-1.2.12/debian/patches/fix-db-write-lock.patch xapian-core-1.2.12/debian/patches/fix-db-write-lock.patch --- xapian-core-1.2.12/debian/patches/fix-db-write-lock.patch 1970-01-01 12:00:00.000000000 +1200 +++ xapian-core-1.2.12/debian/patches/fix-db-write-lock.patch 2012-12-11 17:25:07.000000000 +1300 @@ -0,0 +1,62 @@ +Taken from 1.2 branch of upstream SVN r16938. + +--- a/backends/flint_lock.cc (revision 16937) ++++ b/backends/flint_lock.cc (revision 16938) +@@ -2,5 +2,5 @@ + * @brief Flint-compatible database locking. + */ +-/* Copyright (C) 2005,2006,2007,2008,2009,2010,2011 Olly Betts ++/* Copyright (C) 2005,2006,2007,2008,2009,2010,2011,2012 Olly Betts + * + * This program is free software; you can redistribute it and/or +@@ -134,4 +134,20 @@ + close(fds[0]); + ++ // Connect pipe to stdin and stdout. ++ dup2(fds[1], 0); ++ dup2(fds[1], 1); ++ ++ // Make sure we don't hang on to open files which may get deleted but ++ // not have their disk space released until we exit. Close these ++ // before we try to get the lock because if one of them is open on ++ // the lock file then closing it after obtaining the lock would release ++ // the lock, which would be really bad. ++ for (int i = 2; i < lockfd; ++i) { ++ // Retry on EINTR; just ignore other errors (we'll get ++ // EBADF if the fd isn't open so that's OK). ++ while (close(i) < 0 && errno == EINTR) { } ++ } ++ closefrom(lockfd + 1); ++ + reason why = SUCCESS; + { +@@ -160,5 +176,5 @@ + // Tell the parent if we got the lock, and if not, why not. + char ch = static_cast<char>(why); +- while (write(fds[1], &ch, 1) < 0) { ++ while (write(1, &ch, 1) < 0) { + // EINTR means a signal interrupted us, so retry. + // Otherwise we're DOOMED! The best we can do is just exit +@@ -169,8 +185,4 @@ + if (why != SUCCESS) _exit(0); + } +- +- // Connect pipe to stdin and stdout. +- dup2(fds[1], 0); +- dup2(fds[1], 1); + + // Make sure we don't block unmount() of partition holding the current +@@ -184,13 +196,4 @@ + // gives a warning even if we cast the result to void. + } +- +- // Make sure we don't hang on to open files which may get deleted but +- // not have their disk space released until we exit. +- for (int i = 2; i < lockfd; ++i) { +- // Retry on EINTR; just ignore other errors (we'll get +- // EBADF if the fd isn't open so that's OK). +- while (close(i) < 0 && errno == EINTR) { } +- } +- closefrom(lockfd + 1); + + // FIXME: use special statically linked helper instead of cat. diff -Nru xapian-core-1.2.12/debian/patches/replication-above-32GB.patch xapian-core-1.2.12/debian/patches/replication-above-32GB.patch --- xapian-core-1.2.12/debian/patches/replication-above-32GB.patch 1970-01-01 12:00:00.000000000 +1200 +++ xapian-core-1.2.12/debian/patches/replication-above-32GB.patch 2012-12-11 17:25:13.000000000 +1300 @@ -0,0 +1,13 @@ +Taken from 1.2 branch of upstream SVN r16915. + +--- a/net/remoteconnection.cc (revision 16348) ++++ b/net/remoteconnection.cc (revision 16915) +@@ -618,5 +618,7 @@ + int shift = 0; + do { +- if (i == buffer.end() || shift > 28) { ++ // Allow a full 64 bits for message lengths - anything longer than that ++ // is almost certainly a corrupt value. ++ if (i == buffer.end() || shift > 63) { + // Something is very wrong... + throw Xapian::NetworkError("Insane message length specified!"); diff -Nru xapian-core-1.2.12/debian/patches/series xapian-core-1.2.12/debian/patches/series --- xapian-core-1.2.12/debian/patches/series 1970-01-01 12:00:00.000000000 +1200 +++ xapian-core-1.2.12/debian/patches/series 2012-12-11 17:22:00.000000000 +1300 @@ -0,0 +1,2 @@ +fix-db-write-lock.patch +replication-above-32GB.patch
Taken from 1.2 branch of upstream SVN r16938.
--- a/backends/flint_lock.cc (revision 16937)
+++ b/backends/flint_lock.cc (revision 16938)
@@ -2,5 +2,5 @@
* @brief Flint-compatible database locking.
*/
-/* Copyright (C) 2005,2006,2007,2008,2009,2010,2011 Olly Betts
+/* Copyright (C) 2005,2006,2007,2008,2009,2010,2011,2012 Olly Betts
*
* This program is free software; you can redistribute it and/or
@@ -134,4 +134,20 @@
close(fds[0]);
+ // Connect pipe to stdin and stdout.
+ dup2(fds[1], 0);
+ dup2(fds[1], 1);
+
+ // Make sure we don't hang on to open files which may get deleted but
+ // not have their disk space released until we exit. Close these
+ // before we try to get the lock because if one of them is open on
+ // the lock file then closing it after obtaining the lock would release
+ // the lock, which would be really bad.
+ for (int i = 2; i < lockfd; ++i) {
+ // Retry on EINTR; just ignore other errors (we'll get
+ // EBADF if the fd isn't open so that's OK).
+ while (close(i) < 0 && errno == EINTR) { }
+ }
+ closefrom(lockfd + 1);
+
reason why = SUCCESS;
{
@@ -160,5 +176,5 @@
// Tell the parent if we got the lock, and if not, why not.
char ch = static_cast<char>(why);
- while (write(fds[1], &ch, 1) < 0) {
+ while (write(1, &ch, 1) < 0) {
// EINTR means a signal interrupted us, so retry.
// Otherwise we're DOOMED! The best we can do is just exit
@@ -169,8 +185,4 @@
if (why != SUCCESS) _exit(0);
}
-
- // Connect pipe to stdin and stdout.
- dup2(fds[1], 0);
- dup2(fds[1], 1);
// Make sure we don't block unmount() of partition holding the current
@@ -184,13 +196,4 @@
// gives a warning even if we cast the result to void.
}
-
- // Make sure we don't hang on to open files which may get deleted but
- // not have their disk space released until we exit.
- for (int i = 2; i < lockfd; ++i) {
- // Retry on EINTR; just ignore other errors (we'll get
- // EBADF if the fd isn't open so that's OK).
- while (close(i) < 0 && errno == EINTR) { }
- }
- closefrom(lockfd + 1);
// FIXME: use special statically linked helper instead of cat.
Taken from 1.2 branch of upstream SVN r16915.
--- a/net/remoteconnection.cc (revision 16348)
+++ b/net/remoteconnection.cc (revision 16915)
@@ -618,5 +618,7 @@
int shift = 0;
do {
- if (i == buffer.end() || shift > 28) {
+ // Allow a full 64 bits for message lengths - anything longer than that
+ // is almost certainly a corrupt value.
+ if (i == buffer.end() || shift > 63) {
// Something is very wrong...
throw Xapian::NetworkError("Insane message length specified!");
signature.asc
Description: Digital signature

