msDrawMap(): Map parent object is null

Umberto Nicoletti umberto.nicoletti at GMAIL.COM
Tue Jun 5 23:45:10 PDT 2007


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
> >
> >
> >
> > --
> > *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