Ticket #1400 (closed defect: fixed)

Opened 7 years ago

Last modified 4 years ago

layerObj.delete() crashes in Java/MapScript

Reported by: umn-ms@… Owned by: sdlime
Priority: high Milestone:
Component: MapScript-SWIG Version: 4.6
Severity: normal Keywords:
Cc:

Description (last modified by hobu) (diff)

Thread "Java VM Crashes using the Mapscript API" in Mapserver-users-List

Christian reported a crash in layerObj.delete() which I 
also detected. 
I think I understood the following: 

Let's say, we have an initialized  mapObj mO; 

layerObj lO = new layerObj(mO); 
// Say lO is the 5th layer now. 
// Now lO.swigCMemOwn == true and 
//     lO.swigCPtr points onto the mO.swigCPtr->layers[4] 

... 
// now the mapObj is deleted but the Java-layerObj continues to live. 
// the C-layer-Object mO.swigCPtr->layers[4] will deleted and freed also! 
mO.delete() 
// From now on O.swigCPtr points into invalid piece of C-memory. 
... 

Later on the Java-garbage-collector finalizes the layerObj. 

Because of "lO.swigCMemOwn == true" and "lO.swigCPtr!=0" the finalize-method calls 
layerObj.delete(). This method frees lO.swigCPtr which is invalid memory. 

Same story about layerObj/classObj.

Change History

  Changed 7 years ago by sdlime

  • component changed from MapScript to MapScript-SWIG

  Changed 6 years ago by szekerest

This bug was fixed for C# in

http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=1743

I will look after how to fix it generally for mapscript.

Tamas

  Changed 5 years ago by unicoletti

  • cc unicoletti@… added

follow-up: ↓ 5   Changed 5 years ago by hobu

  • description modified (diff)

What is the status on this one now that RFC 24 is in place?

in reply to: ↑ 4   Changed 5 years ago by unicoletti

Replying to hobu:

What is the status on this one now that RFC 24 is in place?

It should be fixed, but I'm waiting to add another couple of features to rfc24 before closing it.

  Changed 4 years ago by unicoletti

  • status changed from new to closed
  • resolution set to fixed

Fixed by RFC-24, closing

Note: See TracTickets for help on using tickets.