[mapserver-dev] Crash on Windows: fontcache.c

Jeff McKenna jmckenna at gatewaygeomatics.com
Sun Oct 19 12:45:35 PDT 2014


On 2014-10-19 4:30 PM, Even Rouault wrote:
> Le dimanche 19 octobre 2014 21:14:33, Jeff McKenna a écrit :
>> Hi devs,
>>
>> With git/master on Windows, I trigger a crash of
>> mapserv.exe/mapserver.dll any time I call mapserv.exe in CGI mode.  (no
>> issue with MapServer 6.4.1)
>>
>> - The good news is that I can reproduce this at the commandline with
>> 'mapserv -nh'.
>>
>>     C:\ms4w> mapserv -nh
>>
>>       This script can only be used to decode form results and
>>       should be initiated as a CGI process via a httpd server.
>>       For other options please try using the --help switch.
>>
>>       (then a crash occurs, with this info below)
>>
>>         ***
>>         Problem signature:
>>           Problem Event Name:	APPCRASH
>>           Application Name:	mapserv.exe
>>           Application Version:	0.0.0.0
>>           Application Timestamp:	54440643
>>           Fault Module Name:	mapserver.dll
>>           Fault Module Version:	0.0.0.0
>>           Fault Module Timestamp:	54440640
>>           Exception Code:	c0000005
>>           Exception Offset:	00274c8b
>>           OS Version:	6.0.6002.2.2.0.768.2
>>        ***
>>
>> - I compiled mapserv in Debug mode (Visual Studio 2008)
>>
>> - in the Visual Studio 2008 debugger this message appears:
>>
>>            message: Unhandled exception at 0x10274c8b (mapserver.dll) in
>>            mapserv.exe:
>>            0xC0000005: Access violation reading location 0xdddddddd.
>>
>> - the debugger stops at:
>>
>>            fontcache.c
>>
>>                 line 92: FT_Done_FreeType(c->library);
>>
>> - the call stack at that point is:
>>
>>           ***
>>           mapserver.dll!_FT_Done_Library()  + 0x7b bytes
>>    	mapserver.dll!_FT_Done_FreeType()  + 0x11 bytes
>> 	mapserver.dll!msFreeFontCache(ft_cache * c=0x104bf560)  Line 92 + 0xb
>> bytes
>>    	mapserver.dll!msFontCacheCleanup()  Line 164 + 0x9 bytes
>>    	mapserver.dll!msCleanup(int signal=1)  Line 1967
>>    	mapserv.exe!msCleanupOnExit()  Line 74 + 0x7 bytes
>>    	msvcr90d.dll!doexit(int code=0, int quick=0, int retcaller=0)  Line
>> 591	C msvcr90d.dll!exit(int code=0)  Line 412 + 0xd bytes
>>    	mapserv.exe!main(int argc=2, char * * argv=0x0453da10)  Line 315 +
>> 0xa bytes
>>    	mapserv.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes
>>    	mapserv.exe!mainCRTStartup()  Line 403
>>    	kernel32.dll!75f3d3c9()
>>    	[Frames below may be incorrect and/or missing, no symbols loaded
>> for kernel32.dll]
>>    	ntdll.dll!77871603()
>>    	ntdll.dll!778715d6()
>>    	libeay32.dll!cms_SignedData_init_bio(CMS_ContentInfo_st * cms=)  Line
>> 817 + 0xe bytes
>>           ***
>>
>> I'm wondering if anyone has any ideas of what I can try, or if you need
>> more information.  I am pretty stuck.  Thanks everyone,
>
> Jeff,
>
> Not tested, but by code review, I believe the issue is that msCleanup() must
> be called twice on Windows.
>
> Once by msCleanup(0) at line 308 of mapserv.c
>
> And twiche by the code at line 237 of mapserv.c
>
> #ifdef WIN32
>    atexit( msCleanupOnExit );
> #endif
>
> I'd recommand you trying to remove those 3 lines. I can't see any reason for a
> win32 specific code path.
>
> Even
>

Even that did it!  (I removed the second call, the 3 lines, for 
msCleanupOnExit, as you said).   Wow!  Thank you so much.  Will you 
commit this into master now?  I can also, but, you solved it.

I can also file a ticket if you want this to be recorded.  Let me know.

I owe you a beer.

-jeff






More information about the mapserver-dev mailing list