Memory leak on every doLayout() in DayView.addAppointmentsToGrid() and
MonthView.layOnAppointment(). AppointmentWidgets are registered to the
dragController, but never released. References kept in RegisteredDraggable
objects in MouseDragHandlers dragHandleMap leave AppointmentWidget and all
objects it references outside of reference counting garbage collection.
Steps to reproduce and verify:
1.open calendar in day view in Chromium, create an appointment
2.open the developer tools, take a Heap snapshot at the "Profiles" tab
3.get the doLayout() firing, change the view date back and forth for example 10
times but so that the appointment is always in view
4.take another Heap snapshot at the "Profiles" tab
5.view the second heap snapshot in "Comparison" mode
6.find the "AppontmentWidget_0" object and check the delta column, you will
notice that none have been deleted
7.check the "Object's retaining tree" to see that the reference is kept in a
MouseDragHandler$RegisteredDraggable_0
Fix:
deregister the widgets from the dragController.
The attached patch to trunk/gwt-cal/ keeps the dragController registered widget
refrences and deregisters them on the next doLayout(). Also the
AppointmentWidget has to implement HasTouchStartHandlers and
HasTouchEndHandlers because the MouseDragHandler.makeNotDraggable(Widget
widget) will otherwise fire null pointer exceptions.
Original issue reported on code.google.com by ville.fr...@gmail.com on 7 Feb 2013 at 10:04
Original issue reported on code.google.com by
ville.fr...@gmail.com
on 7 Feb 2013 at 10:04Attachments: