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

Even Rouault even.rouault at spatialys.com
Sun Oct 19 13:01:31 PDT 2014

> 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 could commit, but perhaps Thomas should confirm. It is somehow linked to his 
that added msFontCacheCleanup() in msCleanup(). Although that the double 
cleanup on Windows is probably much older than that.

I think that msFontCacheCleanup() doesn't like to be called twice in the 
ifndef USE_THREAD case (I suspect you compile without USE_THREAD since I think 
the other code path can be safely called twice)

From the comment at line 227 of mapserv.c before
#ifdef WIN32
  atexit( msCleanupOnExit );
I'm wondering if the intent wasn't that this code should be called when the 
process is stopped in a brutal way (on unix there is similar code above based 
on signal handlers). But I'm quite surprised that atexit() is called in non-
nominal process end. According to the man page of atexit() : "Functions 
registered using atexit() (and on_exit(3)) are not called if a process 
terminates abnormally because of the delivery of a signal."
And it seems that Windows follows POSIX behaviour since according to 
http://msdn.microsoft.com/en-us/library/tze57ck3.aspx "The atexit function is 
passed the address of a function (func) to be called when the program 
terminates normally."

> I owe you a beer.

Next time you come by Paris ;-)

> -jeff
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev

Spatialys - Geospatial professional services

More information about the mapserver-dev mailing list