[Mapserver-dev] file handle leakage in mapswf.c?
Steve Spicklemire
steve at spvi.com
Wed Jul 16 12:11:53 EDT 2003
Thanks Yewondwossen,
On Wednesday, July 16, 2003, at 11:08 AM, Yewondwossen Assefa wrote:
> Hi There,
>
> I have applied the patches to mapswf.c (r1.30). Thnaks a lot.
>
> There still seems to be an issue when rendering labels with angles.
> Does this work properly for you ? You can contact me off the list on
> this issue if It works for you. If not I will enter a bug in mapserver
> on that.
Hmm.. well.. before my changes, it didn't work at all. After I made my
changes.. it's working for me. What does it do on your system?
thanks,
-steve
>
> Later,
>
> Steve Spicklemire wrote:
>
>>
>> Hi Mapserver developers..
>>
>> First, I want to thank you for a fantastic product. In a very short
>> period of time, I've moved the mapping code of a complex system to
>> mapscript. We're developing a sort of property/inventory management
>> system with Zope and flash. We needed maps to make it possible to
>> view the system in a graphical way. I started with ming alone, but
>> happily someone pointed out Mapserver, and I found that with
>> Mapserver, and PostGIS I could do everything I needed to. The only
>> problem was that scaling, rotating, and sometimes even presentation
>> of fonts wasn't working. I scoured the mailing lists.. and fiddled
>> around with variations on mapfiles for several days. Yesterday, I
>> decided that I needed to dig in to the code with the debugger and
>> find out what was really happening. It seems that mapswf.c allocates
>> a file handle to read a font file every time it draws text! I had a
>> *lot* of labels on my maps, and my process was running out of file
>> handles. Unfortunately this was silently ignored, and the result was
>> simply no output! (By the time the code got around to trying to
>> *write* anything, all the file handles were consumed by attempts to
>> load the font from the filesystem).
>>
>> Anyway.. my quick-fix is to simply close the font file every time
>> it's read. Probably some sort of font-cache would make more sense. (I
>> think that ming may already *have* a font cache.. I'll look into what
>> it would take to find out.)
>>
>> Here are my patches to mapswf.c...
>>
>> -steve
>>
>> diff -C3 -r1.29 mapswf.c
>> *** mapswf.c 11 Jun 2003 17:54:42 -0000 1.29
>> --- mapswf.c 16 Jul 2003 13:31:12 -0000
>> ***************
>> *** 1563,1580 ****
>> if (!string || !pszFontFile || !psColor)
>> return NULL;
>>
>> ! oFont = loadSWFFontFromFile(fopen(pszFontFile, "rb"));
>> ! if (oFont)
>> ! {
>> ! oText = newSWFText();
>> ! SWFText_setFont(oText, oFont);
>> ! SWFText_moveTo(oText, (float)nX, (float)nY);
>> ! SWFText_setColor(oText, (byte)psColor->red,
>> (byte)psColor->green, (byte)psColor->blue,
>> ! 0xff);
>> ! SWFText_setHeight(oText, (float)dfSize);
>> ! SWFText_addString(oText, string, NULL);
>>
>> ! return oText;
>> }
>>
>> return NULL;
>> --- 1563,1585 ----
>> if (!string || !pszFontFile || !psColor)
>> return NULL;
>>
>> ! FILE *f = fopen(pszFontFile, "rb");
>> !
>> ! if (f) {
>> ! oFont = loadSWFFontFromFile(f);
>> ! if (oFont)
>> ! {
>> ! fclose(f);
>> ! oText = newSWFText();
>> ! SWFText_setFont(oText, oFont);
>> ! SWFText_moveTo(oText, (float)nX, (float)nY);
>> ! SWFText_setColor(oText, (byte)psColor->red,
>> (byte)psColor->green, (byte)psColor->blue,
>> ! 0xff);
>> ! SWFText_setHeight(oText, (float)dfSize);
>> ! SWFText_addString(oText, string, NULL);
>>
>> ! return oText;
>> ! }
>> }
>>
>> return NULL;
>> ***************
>> *** 1896,1902 ****
>>
>> // char *error=NULL, *font=NULL;
>> // int bbox[8];
>> - // double angle_radians = MS_DEG_TO_RAD*label->angle;
>>
>> size = label->size*scalefactor;
>>
>> --- 1901,1906 ----
>> ***************
>> *** 1953,1963 ****
>> return(-1);
>> }
>>
>> ! oText = DrawText(string, x, y, msBuildPath(szPath,
>> fontset->filename, font), size, &sColor);
>> if (oText)
>> {
>> //nTmp = image->img.swf->nCurrentMovie;
>> ! SWFMovie_add(GetCurrentMovie(map, image), oText);
>> }
>>
>> return 0;
>> --- 1957,1970 ----
>> return(-1);
>> }
>>
>> ! oText = DrawText(string, 0, 0, msBuildPath(szPath,
>> fontset->filename, font), size, &sColor);
>> if (oText)
>> {
>> + SWFDisplayItem i;
>> //nTmp = image->img.swf->nCurrentMovie;
>> ! i = SWFMovie_add(GetCurrentMovie(map, image), oText);
>> ! SWFDisplayItem_moveTo(i, x, y);
>> ! SWFDisplayItem_rotate(i, (float)label->angle);
>> }
>>
>> return 0;
>> ***************
>> *** 1997,2005 ****
>> return(-1);
>> }
>>
>> ! oFont = loadSWFFontFromFile(fopen(msBuildPath(szPath,
>> fontset->filename, font), "rb"));
>> if (oFont)
>> {
>> oText = newSWFText();
>> SWFText_setFont(oText, oFont);
>> //SWFText_addString(oText, string, NULL);
>> --- 2004,2014 ----
>> return(-1);
>> }
>>
>> ! FILE *f = fopen(msBuildPath(szPath, fontset->filename, font),
>> "rb");
>> ! oFont = loadSWFFontFromFile(f);
>> if (oFont)
>> {
>> + fclose(f);
>> oText = newSWFText();
>> SWFText_setFont(oText, oFont);
>> //SWFText_addString(oText, string, NULL);
>> ***************
>> *** 2543,2548 ****
>> --- 2552,2558 ----
>> int nLength;
>> int iPointPos;
>> int iSlashPos;
>> + int iSaveResult;
>> char szAction[200];
>> SWFAction oAction;
>> mapObj *map = NULL;
>> ***************
>> *** 2558,2565 ****
>> "OUTPUT_MOVIE",""),
>> "MULTIPLE") != 0)
>> {
>> ! SWFMovie_save(image->img.swf->sMainMovie, filename);
>> return(MS_SUCCESS);
>> }
>>
>> /*
>> --------------------------------------------------------------------
>> */
>> --- 2568,2579 ----
>> "OUTPUT_MOVIE",""),
>> "MULTIPLE") != 0)
>> {
>> ! iSaveResult = SWFMovie_save(image->img.swf->sMainMovie,
>> filename);
>> ! if (!iSaveResult) {
>> return(MS_SUCCESS);
>> + }else{
>> + return(MS_FAILURE);
>> + }
>> }
>>
>> _______________________________________________
>> Mapserver-dev mailing list
>> Mapserver-dev at lists.gis.umn.edu
>> http://lists.gis.umn.edu/mailman/listinfo/mapserver-dev
>>
>
> --
> ----------------------------------------------------------------
> Assefa Yewondwossen Software Analyst
> Email: assefa at dmsolutions.ca http://www.dmsolutions.ca/
>
> Phone: (613) 565-5056 (ext 14)
> Fax: (613) 565-0925
> ----------------------------------------------------------------
>
>
>
>
More information about the mapserver-dev
mailing list