These operations:

  1. Opening Evolution
  2. Browsing through the calendar (going back about 30 months)
  3. Closing Evolution

generated more than 180 live queries:

Browsing cache analysis

Cache size

and caused that heap of EDS process grew by more 2,5 MB on my testing calendar:

Heap

Heap grew by more than 2.5 MB

Notes:

  • Going back by month in Evolution generated 5 live queries (for day, week, work week, month and list view)
  • One can notice, that not all queries were freed, when I closed Evolution. However, I verified, that only live queries generated by evolution-alarm-notify process were not freed. This process stays alive even when Evolution is closed.
  • The first increment of heap size  (from 506K to 8180K) is caused by opening Evolution (opening calendar).
  • The next smaller increments of heap size are due to live queries.
  • The last decrement is caused by closing Evolution.

EDS live queries leak

August 6, 2008

I wanted to take closer look on the memory consumption of  “browsing-through-the-calendar” operation. As I have probably found a bug, I will post about this later.

The bug: when one clicks on the clock applet, live query, that watches the actual month is generated (and calendar window appears). Another click on the clock applet  (to hide the calendar window) – live query IS NOT destroyed (ECalViewListener object is destroyed, but EDataCalView object is not destroyed).  Next click on the calendar window  –  the same live query is generated again (new calendar client was created).

Here is the picture documenting the error : As I was clicking on the clock applet (almost every second), the number of live queries was increasing and they were not destroyed.

To reproduce the bug:

  1. export ORBIT2_DEBUG_STRMAX=1000
  2. export ORBIT2_DEBUG=traces
  3. Click on the clock applet a few times. Watch, that the same live queries are generated.
  4. Open Evolution and create some event in actual month.
  5. Watch CORBA communication – every live queries will be informed, that new object was created by notifyObjectsAdded method

As it seems to me, we are destroying live queries only when orbit connection is disconnected. However, there are so many listeners and views, that I am little bit confused, still.