[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#695649: unblock: xapian-core/1.2.12-2



Package: release.debian.org
Severity: normal
User: release.debian.org@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 <olly@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!");

Attachment: signature.asc
Description: Digital signature


Reply to: