From 3ab55427a1c434eb9c4b160353fdeccb259f2521 Mon Sep 17 00:00:00 2001 From: Vassilii Khachaturov Date: Fri, 13 Sep 2013 17:54:23 +0000 Subject: [PATCH] 7063: endless loop in probably_alive_range Add a hack protection for descendants like we already have for ancestors, and add a debug printout. svn: r23117 --- src/Utils.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Utils.py b/src/Utils.py index bd350e8be..edb6e11e1 100644 --- a/src/Utils.py +++ b/src/Utils.py @@ -830,13 +830,15 @@ class ProbablyAlive(object): date1, date2, explain, other = descendants_too_old(person, self.AVG_GENERATION_GAP) except RuntimeError: raise Errors.DatabaseError( - _("Database error: %s is defined as his or her own ancestor") % + _("Database error: loop in %s's descendants") % name_displayer.display(person)) if date1 and date2: return (date1, date2, explain, other) def ancestors_too_old(person, year): + LOG.debug("ancestors_too_old('{}', {})".format( + name_displayer.display(person), year) ) family_handle = person.get_main_parents_family_handle() if family_handle: family = self.db.get_family_from_handle(family_handle) @@ -938,9 +940,14 @@ class ProbablyAlive(object): return (None, None, "", None) - # If there are ancestors that would be too old in the current year - # then assume our person must be dead too. - date1, date2, explain, other = ancestors_too_old (person, - self.AVG_GENERATION_GAP) + try: + # If there are ancestors that would be too old in the current year + # then assume our person must be dead too. + date1, date2, explain, other = ancestors_too_old (person, - self.AVG_GENERATION_GAP) + except RuntimeError: + raise Errors.DatabaseError( + _("Database error: loop in %s's ancestors") % + name_displayer.display(person)) if date1 and date2: return (date1, date2, explain, other)