ThinkGeo.com    |     Documentation    |     Premium Support

Attempted to read or write protected memory

Hello. 


I have a problem with the last two updates. 


With the most recent update, 3.1.273, I get the following type of error,


Attempted to read or write protected memoryAccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.]

   ThinkGeo.MapSuite.Core.FeatureSource.GetFeaturesByColumnValueCore(String columnName, String columnValue, IEnumerable`1 returningColumnNames) +0

   ThinkGeo.MapSuite.Core.FeatureSource.GetFeaturesByColumnValue(String columnName, String columnValue, IEnumerable`1 returningColumnNames) +187

   ThinkGeo.MapSuite.Core.FeatureSource.GetFeaturesByColumnValue(String columnName, String columnValue) +180

   RMMSGeo.RMMS_CropLayer.getExtentSTR(Collection`1 zoomToPK) +246

   _Default.doMapExtent() +215

   _Default.Page_Load(Object sender, EventArgs e) +1564

   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25

   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42

   System.Web.UI.Control.OnLoad(EventArgs e) +132

   System.Web.UI.Control.LoadRecursive() +66

   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

 


What is interesing is that I do not get this error when running through VS 2008 and using its built in web server.  However, after publsihing to IIS7 on a Win 2008 64 bit server, I get this error.  Additionally, I did not get this error with the previous release, 3.1.182, though I had the same "attempted to read or write protected memory" in a different area of the application.  With version 3.1.124 I do not have any of these errors.  I am  having to go back to 3.1.124 because of these errors with the last two releases.  And again, I do not get these errors (even when dev and web server are the same) using VS 2008 and its internal web server.  

 


Please help....


 


Thank you,


Binu



Hi Binu,


We have recreated your problem in a 64-bit machine, and we have fixed this problem by modifying the configuration of IIS 7.0. 
At first, you should set the Application Pool of your Web Site to “Classic.NET AppPool”, and then set the “Enable 32-Bit Applications” of “Classic.NET AppPool” advanced settings true in the Application Pools panel. Please take a look at the screenshot below:
 


Hope this makes sense, and any more questions please let me know.
Thanks,
Sun 

Sun, 
  
 Thank you for the response.  I tried your solution hoping it would be as straight forward as you presented it.  Unfortunately, the application throws out a new error, ‘mapParser’ is undefined, and the map doesn’t render while running under the Classic .Net AppPool with 32bit applications enabled.  The rest of the web page does render, just not the map.  I tried setting the Enable 32 bit applications on the DefaultAppPool and using that but then after about two minutes I get the dreaded pink image for a map.   
  
 Your help is greatly appreciated in this matter… 
  
 Thank you, 
 Binu 
  
   


Binu,


That is strange, we have a sample which just calls the GetFeaturesByColumnValue API, and it works fine using the above setting. Could you please supply us a simple sample to recreate this problem? And also, about the mapParser error, please take a look at the following post and have a try.
gis.thinkgeo.com/Support/Dis...fault.aspx
Any more information is appreciated.
Thanks,
Sun

I just upgraded to the same version and am encountering the same error using the same function.  Was not encountering this previously. 
  
 My code is too complex to post, but the routine that is breaking is pretty much based on "CSharp Samples\Samples\Features\FindFeatureById.aspx" (which is installed with ThinkGeo).  The sample uses GetFeatureById, which works.  GetFeatureByColumnName does not work for me, though. 
  
 I have a ShapeFileFeatureLayer that I am searching for when I click a button that is setup to do an AsyncPostback, the same exact way the sample is setup. 
  
 I switched to using "GetFeaturesById" and it works (as in the example mentioned above).  When I use GetFeaturesByColumnValue it does not. 
  
  
  


FYI: Mine works with 3.1.247.  So something happened between 247 and 273. 
  
 Thanks.

Hi Abner,


Could you please give us some information about the machine environment that your application runs at? Is the Operation System a 64bit or 32bit one? Is this error happens only when you deployed your application to the IIS 7.0? Have you tried the solution that I mentioned above? We will set up a same environment as yours to try to recreate this problem. 
Any more information is much appreciated.
Thanks,
Sun

It’s Windows Server 2003 R2 x64 Service Pack 2, Intel Xeon E4545, 16GB RAM.  IIS is v6.0 so the solution above doesn’t apply, I think.

Hi Abner,


We make some more tests about this problem and recreate it finally. This is really a bug in our MapSuiteCore, and we will fix this bug in the latest public release (may be coming in next week). You also could contact our support man to get a temporary version (you’d better get version 3.1.288, because it has the features in 3.1.273 and doesn’t has this problem) of WebEdition if this is urgent.
Sorry for the inconvenience and any more questions please let me know.
Thanks,
Sun

Thank you for looking into it.  I am good with 3.1.247, but will upgrade and test again once the new release is available since we have a release of our website this weekend and I don’t want to risk it. 
  


OK, any more questions please let me know. 
  
 Thanks, 
  
 Sun 


I am experiencing the same problem, every once in a while. 



I am on Server 2003 SP2, 32bit, IIS 6.


Update:

I have both 3.1.182 and 3.1.273 running in the same App Pool. I think 3.1.273 triggered the error. As I was clicking around, I triggered an Overlay refresh, and saw "Exception has been thrown by the target of an invocation" tiled over the map. After that, both sites were crashing when loading the map. They would throw "System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt." The stacktrace showed that it was on .Open() of a ShapefileFeatureLayer. I think it might have something to do with the proj4 object.



Hi Rob,


Could you give us a simple sample or some code to recreate this problem? How many proj4 objects are you using in your code? I remember that there is an issue in MapSuite Core that some exception is raised when you use a couple of proj4 objects.
Any more information about this is much appreciated.
Thanks,
Sun

I have about 20 ShapefileFeatureLayers, each with their own proj4 object, that are loaded on page_load. Then for spatial queries performed via callbacks, I usually create a temp ShapefileFeatureLayer, with a new proj4 object. 
  
 I remember running into problems when trying to share them: one layer would close proj4, while another layer expects it to be open. Have the issues of shared proj4 objects been fixed?

Just got the error to occur in VS2008 webserver. I’ve never seen this error in 3.1.182 or below. I am seeing it in both 3.1.273 and 3.1.295 (todays custom build) 
  
 Here is the stack trace: 
  
 [AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.] 
    Proj4Extension.Proj4Extensionx86.pj_init(Int32 argc, String[] args) +0 
    Proj4Extension.Proj4Extensionx86.Init(Int32 argc, String[] args) +36 
  
 [TargetInvocationException: Exception has been thrown by the target of an invocation.] 
    System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0 
    System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +71 
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +261 
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29 
    System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +19 
    ThinkGeo.MapSuite.Core.Proj4Projection.xec88ebd758d8ecf7(String xc518b48efbd9149e) +174 
    ThinkGeo.MapSuite.Core.Proj4Projection.OpenCore() +667 
    ThinkGeo.MapSuite.Core.Projection.Open() +44 
    ThinkGeo.MapSuite.Core.FeatureSource.Open() +63 
    ThinkGeo.MapSuite.Core.FeatureLayer.OpenCore() +58 
    ThinkGeo.MapSuite.Core.Layer.Open() +55 


Problem fixed by having all the ShapefileFeatureLayers and InMemoryFeatureLayers within my Map, share a single proj4 object. Any other time I need proj4 object (for querying layers not displayed in the map), I create a temp one, use it, and GC takes care of the rest. I haven’t seen the error come back yet, so I think that did it.

Hi Rob, 
  
 Glad to hear that you have fixed this problem and thanks for sharing your solution. 
  
 Any more questions please let me know. 
  
 Thanks, 
  
 Sun