ThinkGeo.com    |     Documentation    |     Premium Support

Map crash after long idle time

Hi. I am working on Firefox 3.6.6 developing a system, and at the end of each day I leave the browser open overnight. I have noticed that if I leave a tab with a map, the browser has crashed by the following morning. This happens even with no other tabs open, and even on maps that have no data loaded yet. I can't be 100% sure that the problem is ThinkGeo, but it does seem like there's a gradual memory leak which eventually kills the browser. At first I suspected the problem was having Firebug open for long periods, tracking the session refreshes that the map issues regularly, but the problem persisted even when Firebug was not running. It's very difficult to test since it takes so long for the map to crash. There are workarounds of course, I could make the page auto-refresh every hour or something like that, but I thought you might want to look into it.



Janet, 
  
 It’s so weird. In Map Suite WebEdition product, we will refresh the session every 900 seconds but it will never cause the memory leak or browser crash problem. 
  
 I’m not sure whether your problem is caused by our product, and please provide us more information for full detail. 
  
 Thanks, 
  
 Khalil

I try with some other browsers and with blank maps that don’t have our custom code in them, and see if it still crashes.

Janey, 
  
   If you have a scenario we could test it out.  Is the map auto refreshing every so often on your end?  I will open our web samples, maps.thinkgeo.com and a few other public map screen we have and see what happens.  One thing you could do if we can’t find anything is if you could build a small sample that if left open and running causes the problem.  Then we could run the exact sample.  Is the issue if you haver the map under IIS or the VS mini web server?  Anything special you can think of?  Do you have raster layers or database connections or anything special? 
  
 David

It happens on the VS Cassini server, yes. I should test it on a full-blown IIS. As for anything special, no, nothing. It even happens on maps that don’t have any data loaded whatsoever, and we don’t do any Ajax stuff in the background. The page just sits there, which is why I suspected TG, since the map does that regular session refresh. 
  
 I’ll see about setting up a sample that causes the issue, and send it to you.

 


Janet,
We also did the same test with IIS before, map with no other operation or just auto changing the extent for one night, but all works fine. Maybe we need to do a test with Cassini Server, can you let us know what version the Cassini server you are using, and where can we download the specified version? Can you send your test sample to us?
Thanks,
Johnny

I managed to find the issue. It was the automatic session refresher after all, but not in the expected manner. I investigated the code and noticed that you use a setInterval call to run the session refresh. However, setInterval creates a new interval every time it is called, and there is no clearInterval to remove older intervals. So over time, the number of keepSession() calls running begins to double. After 2 hours, over a hundred will be running, and after 3 hours over a thousand. Eventually this just overwhelms the browser, which crashes. 
  
 I fixed the problem by overriding the keepsession method as below: 
  
 var sessionInterval = 0; 
 function keepsession() { 
  var request = OpenLayers.Request.issue({ url: ‘session_GeoResource.axd’ }); 
  window.clearInterval(sessionInterval); 
  sessionInterval = window.setInterval(keepsession, 900000); 
 } 
  
 An alternative would be to use a setTimeout() call instead, but if something went wrong and the request.issue call aborted, I was concerned that the timer might not be set and then the session refresh would never be called again. 
  
 Oddly enough, when I checked the websamples site to see if the same problem was present there, I noticed that that implementation of keepsession() there uses setTimeout(), which is a once-off timer and does not suffer from the same issue. Why does the code running on the samples site differ from the latest release code? I am using the 4.0.40.72 production DLLs, downloaded this morning from my client area.

 


Janet,
Thanks for sharing your findings, which changes my mind that I think it doesn’t create a new instance when using window.setInterval.  Thanks again. We will check it and update our code.
The websamples site you mentioned means our online web sample websamples.thinkgeo.com/ , right? Sorry for the inconvenience, it hasn’t been updated for long time.
 
Thanks,
Johnny