msDrawMap(): Map parent object is null

Rodrigo Del C. Andrade rodrigo.andrade at DIGITRO.COM.BR
Wed Jun 6 09:04:36 EDT 2007


    I tested rev 7176, and it's a confirmed fix.
    Thanks!

    Regards,

    Rodrigo


Umberto Nicoletti wrote:
> It's fixed in svn backed by python unit tests.
>
> Umberto
>
> On 6/5/07, Tamas Szekeres <szekerest at gmail.com> wrote:
>> Rodrigo,
>>
>> Your analysis was pretty exhaustive :-)
>>
>> Formery initLayer was responsible to set up the back reference in the
>> layer object. As of the RFC24 related changes the
>> initLayer/msCopyLayer were replaced with a simple assignment of the
>> reference but indeed I cannot see the assignment of the parent
>> reference a the layer object.
>>
>> I think Umberto will correct this issue easily.
>>
>> In the meantime you can try something like this
>>
>> Index: mapobject.c
>> ===================================================================
>> --- mapobject.c (revision 6161)
>> +++ mapobject.c (working copy)
>> @@ -472,6 +472,7 @@
>>          //msCopyLayer((GET_LAYER(map, nIndex)), layer);
>>         GET_LAYER(map, nIndex)=layer;
>>          GET_LAYER(map, nIndex)->index = nIndex;
>> +        layer->map = map;
>>
>>          /* adjust layers drawing order */
>>          for (i=map->numlayers; i>nIndex; i--) {
>>
>>
>> Best regards,
>>
>> Tamas
>>
>>
>> 2007/6/5, Rodrigo Del C. Andrade <rodrigo.andrade at digitro.com.br>:
>> >     Hello dear list, I wish it had been a longer while before I had to
>> > bother y'all again, but I am pulling my hairs out on this one.
>> >
>> >     <deepBreath>
>> >     Here it goes: using java mapscript rev 6168 from svn, whenever 
>> I try
>> > to activate a specific layer, I get this:
>> >
>> >     msDrawMap(): Image handling error. Failed to draw layer named
>> > 'Layer_Tematica_RJ_145'.;: The map parent object is null.
>> >     Tomcat does not crash, so I think this could be a good sign.
>> >
>> >     Digging trough mapserver code I was unable to find this message 
>> and
>> > look at its context to get a better idea of whats going on, so 
>> debuging
>> > my code step by step I came up with the following facts:
>> >
>> >     1- the layer where it crashes is the 68th in the line. Previously
>> > layers where drawn, both inline and non-inline ones.
>> >     2 - this layer is a clone from a layer that exists in the mapfile.
>> > It is declared with:
>> >
>> >                 layerObj layer =
>> > map.getLayerByName(nameFromConstant).cloneLayer();
>> >                layer.setName("blahblahblah");
>> >                try{
>> >                     valores = mapa.insertLayer(layerValores, -1);
>> >                 }catch(Exception e){
>> >                     throw new DGTKeyException("error.maxNumLayers",
>> > e.getMessage());
>> >                }
>> >
>> >     3 - It only crashes when this layer is turned on. Map is shown 
>> with
>> > this layer off when user first logs and it can be turned on from a 
>> tree
>> > widget. If he does, boom.
>> >     4 - Just before calling map.draw(), both map.getLayerByName(name)
>> > and map.getLayer(index) return the right layer. whem map.draw() is
>> > called, boom.
>> >     5 - Suspecting of the clonage bits mixed with the changes to 
>> object
>> > parenthood Umberto implemented, I modified make threadtests to clone a
>> > bunch of layers, insert them into the map, juggle them around a bit 
>> like
>> > happens in my app and then call map.draw() in the hopes of reproducing
>> > the error. No go. The test works normally and no errors occur. :(
>> >     and finally 6 - reverting to mapserver 4.10.1 "fixes" it.
>> >
>> >     Any clues?
>> >
>> >     Thanks!
>> >
>> >     Rodrigo
>> >



More information about the mapserver-users mailing list