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

Bug#513315: Times out waiting for index to be rebuilt



tag 513315 + patch
thanks

On Wed, Jan 28, 2009 at 12:04:33PM +0000, Enrico Zini wrote:
> Importing "apt" is what makes the problem reappear: apt seems to be
> changing the default timeout from None to 2.0: I'll reassign this bug
> to python-apt.

Thanks for figuring out which package was causing the problem.

python-apt is setting the default timeout so that it will time out if
downloading a changelog takes too long.  The attached patch modifies
it to change the default just as long as necessary.  It's racy, but I
think it will work in this case.

Once python-apt requires Python 2.6, it can use urllib2.urlopen's
optional timeout parameter instead.

-- 
Matt                                                 http://ftbfs.org/
diff -ru python-apt-0.7.9~exp2~/apt/package.py python-apt-0.7.9~exp2/apt/package.py
--- python-apt-0.7.9~exp2~/apt/package.py	2009-01-28 04:11:24.000000000 -0800
+++ python-apt-0.7.9~exp2/apt/package.py	2009-01-28 04:17:38.000000000 -0800
@@ -32,10 +32,6 @@
 __all__ = 'BaseDependency', 'Dependency', 'Origin', 'Package', 'Record'
 
 
-# Set a timeout for the changelog download
-socket.setdefaulttimeout(2)
-
-
 def _(string):
     """Return the translation of the string."""
     return gettext.dgettext("python-apt", string)
@@ -600,7 +596,12 @@
             # Check if the download was canceled
             if cancel_lock and cancel_lock.isSet():
                 return ""
+            # FIXME: Once Python 2.6 is required, the timeout can be set using
+            # urllib2.urlopen's timeout parameter.
+            timeout = socket.getdefaulttimeout()
+            socket.setdefaulttimeout(2)
             changelog_file = urllib2.urlopen(uri)
+            socket.setdefaulttimeout(timeout)
             # do only get the lines that are new
             changelog = ""
             regexp = "^%s \((.*)\)(.*)$" % (re.escape(src_pkg))

Reply to: