
"Sean Huang" <huangsean@hotmail.com> wrote in message news:BAY102-DAV363FF7185FDF2B8806438A3840@phx.gbl...
----- Original Message ----- From: "Gennadiy Rozental" <gennadiy.rozental@thomson.com>
"Sean Huang" <huangsean@hotmail.com> wrote in message news:BAY102-DAV1177B755E23C045FE1092BA3870@phx.gbl...
Here is the scenario: A test case implemented as a class and the class uses boost::serialization in the destructor to serialize some objects. On windows, with both VC7.1 and VC8, I would get access violations and runtime-error - pure virtual function call. Turned out it is because test cases are not destroyed until the unit test framework singleton instance goes away which happens only after the main returns. boost::serialization uses extensively function scope static objects and these objects are instantiated during program termination in this particular case. There are some issues AFAICS: 1. function-scope static objects deletion order 2. At least with MSVC, atexit is called when a function-scope static object is created. It seems that the implementation does not support calling atexit when doexit is running. I took a quick glance at the standard but did not find anything that mentions when atexit can be called.
I was able to resolve the problem by forcing the deletion and recreation of the static unit test framework singleton object but I am not sure if there will be other consequences.
Above information does not give me a clear picture of what is going on. Could you please post some example code, so I could comment more intelligently.
Here is an example:
...
T's destructor will not be called. If there are too many static objects like this (as in the case of boost::archive and boost::serialization), the program crashes with access violations because the CRT tries to realloc the function list used by atexit().
Hope this clarifies things a little.
I still do not see Boost.Test references. Could you please give an example that shows the Boost Test involvement. Gennadiy