$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Gennadiy Rozental (gennadiy.rozental_at_[hidden])
Date: 2006-06-22 17:12:01
"Sean Huang" <huangsean_at_[hidden]> wrote in message
news:BAY102-DAV363FF7185FDF2B8806438A3840_at_phx.gbl...
> ----- Original Message -----
> From: "Gennadiy Rozental" <gennadiy.rozental_at_[hidden]>
>>
>> "Sean Huang" <huangsean_at_[hidden]> wrote in message
>> news:BAY102-DAV1177B755E23C045FE1092BA3870_at_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