Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org 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 <o...@survex.com> 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