From 207e297d6911151d3e556be23ede3649beccb674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Hell=C3=A9n-Halme?= Date: Thu, 24 Nov 2011 10:30:48 +0100 Subject: Fix issue with invisible recurring appointments Fixes that recurring appointments goes invisible when hit by the failsafe limit. There is still a hard limit in RecurrenceProcessor, but at least this limit is applied on a per-event basis, meaning that it's always possible to create new recurring appointments without them going invisible. Change-Id: I6c9e1e10db78e1b73ea9f2b7104621fbbd906452 --- src/com/android/calendarcommon2/RecurrenceProcessor.java | 4 +++- tests/src/com/android/calendarcommon2/RRuleTest.java | 14 ++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/com/android/calendarcommon2/RecurrenceProcessor.java b/src/com/android/calendarcommon2/RecurrenceProcessor.java index 641a161..fd225db 100644 --- a/src/com/android/calendarcommon2/RecurrenceProcessor.java +++ b/src/com/android/calendarcommon2/RecurrenceProcessor.java @@ -869,7 +869,9 @@ bysetpos: while (true) { int monthIndex = 0; if (failsafe++ > MAX_ALLOWED_ITERATIONS) { // Give up after about 1 second of processing - throw new DateException("Recurrence processing stuck: " + r.toString()); + Log.w(TAG, "Recurrence processing stuck with r=" + r + " rangeStart=" + + rangeStartDateValue + " rangeEnd=" + rangeEndDateValue); + break; } unsafeNormalize(iterator); diff --git a/tests/src/com/android/calendarcommon2/RRuleTest.java b/tests/src/com/android/calendarcommon2/RRuleTest.java index 53988e2..1d72366 100644 --- a/tests/src/com/android/calendarcommon2/RRuleTest.java +++ b/tests/src/com/android/calendarcommon2/RRuleTest.java @@ -143,11 +143,17 @@ public class RRuleTest extends TestCase { // Infinite loop, bug 1662110 @MediumTest public void testFrequencyLimits() throws Exception { - try { - runRecurrenceIteratorTest("RRULE:FREQ=SECONDLY;BYSECOND=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14," + "15,16,17,18,19,20,21,22,23,24,25,26,27,28,29," + "30,31,32,33,34,35,36,37,38,39,40,41,42,43,44," + "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59", "20000101", 1, ""); + // Rather than checking that we get an exception, + // we now want to finish, but in a reasonable time + final long tenSeconds = 10000; + long start = System.currentTimeMillis(); + runRecurrenceIteratorTest( + "RRULE:FREQ=SECONDLY;BYSECOND=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14," + + "15,16,17,18,19,20,21,22,23,24,25,26,27,28,29," + + "30,31,32,33,34,35,36,37,38,39,40,41,42,43,44," + + "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59", "20000101", 1, "20000101"); + if (System.currentTimeMillis() - start > tenSeconds) { fail("Don't do that"); - } catch (DateException ex) { - // pass } } -- cgit v1.2.3