From 6df93d7182732f42f7f6368a7c834a983a4ce935 Mon Sep 17 00:00:00 2001 From: Vassilii Khachaturov Date: Wed, 18 Sep 2013 14:48:13 +0000 Subject: [PATCH] 7063: endless loop in probably_alive_range Port from gramps34 branch my fix after retest by the bug submitter. Add a hack protection for descendants like we already have for ancestors, and add a debug printout. svn: r23161 --- gramps/gen/utils/alive.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/gramps/gen/utils/alive.py b/gramps/gen/utils/alive.py index 65b9e5d2f..eaa732405 100644 --- a/gramps/gen/utils/alive.py +++ b/gramps/gen/utils/alive.py @@ -338,13 +338,15 @@ class ProbablyAlive(object): date1, date2, explain, other = descendants_too_old(person, self.AVG_GENERATION_GAP) except RuntimeError: raise 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) @@ -446,9 +448,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)