
On Sep 13, 2007, at 12:24 AM, Sean Huang wrote:
The following code in function_template.hpp has me concerned:
template<typename Functor> void assign_to(Functor f) { static vtable_type stored_vtable(f); if (stored_vtable.assign_to(f, functor)) vtable = &stored_vtable; else vtable = 0; }
The function scope statics are not thread-safe as far as I know and this is potentially a show stopper for us (we're in the process of upgrading from 1.33.1 to 1.34+. Same usage in boost.serialization caused our application (very heavy threaded) to crash.
The good news is that even though this requires dynamic initialization of the static, the initialization itself is merely copying two function pointers. Running the initialization twice is no problem: it will just provide the same pointer values. The bad news is that, if the initialization gets skipped, you will get a crash.
Is there any plan to fix this? Or I'm wrong and this is not a problem.
Well, *now* there's a plan to fix it :) Thanks for reporting this. It's ticket #1260, and the fix will be to turn that dynamic initialization of stored_vtable into static initialization, so that no code will actually need to be executed. - Doug