msDrawMap(): Map parent object is null

Tamas Szekeres szekerest at GMAIL.COM
Tue Jun 5 16:15:04 EDT 2007


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
>
>
>
> --
> *Rodrigo Del C. Andrade*
> /Programador/
> /SIC - SSE - Soluções Segurança Pública/
>
> *DÍGITRO TECNOLOGIA*
> *E-mail:* rodrigo.andrade at digitro.com.br
> <mailto:rodrigo.andrade at digitro.com.br>
> *Fone:* +55 48 3281-7314 / +55 48 3281-7000
> *Fax:* +55 48 3281-7299
> *Site:* www.digitro.com <http://www.digitro.com>
>



More information about the mapserver-users mailing list