https://bugzilla.novell.com/show_bug.cgi?id=648130

https://bugzilla.novell.com/show_bug.cgi?id=648130#c0


           Summary: Calling Timer.Change(Infinite, Infinite) leaks timer
                    objects on the scheduler
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.6.x
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: CORLIB
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---
           Blocker: ---


User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10)
Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729; .NET4.0E)

We are seeing an issue where timers stop firing. We have a consistent repro for
this, but we've been struggling with getting an isolated repro. We've narrowed
it down to the change made to the TimerComparer (as a result of the fix for
605092) where reference equality is used as a tie breaker when next_run values
are equal.

Here is what we see:

1) Two timers objects (A and B) are created with exactly the same due time
(happens quite frequently in our system)
2) A is added to the list maintained by the Scheduler.
3) When B is added the code in Scheduler.Add checks if there is already a entry
with the same next_run value (list.IndexOfKey). The TimerComparer finds such an
entry and uses reference equality between A and B, and since they are not equal
returns -1. This causes IndexOfKey fail to find the object. As a result, the
code to handle collisions in Scheduler.Add is never invoked and now have A and
B on the scheduler list with the same next_run value.
4) ChangeTime(-1,-1) is called on B, which sets next_run to ulong.MaxValue but
does NOT remove it from the list, again because the TimerComparer finds A.
5) From this point onwards the sorted list is corrupt (i.e. not sorted). All
comparison are pretty random at this point.

At this state we see lots of timer objects in the sorted list with next_run =
ulong.MaxValue, and our valid timer objects do not fire.

If this description is not enough to help you fix this issue, we can continue
working on an isolated fix. Alternatively we can give you access to debug one
of our machines if you'd like.




Reproducible: Sometimes

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to