Hi,

I try to use a GiNaC::symtab in a thread object. I copy a const reference to the threaded method and get problems on reading the symbols.
If I take a symbol from the table with GiNaC::ex x = m_symbols["mysymbol"], I would run on > 1 thread into errors. Valgrind shows this information:

Possible data race during write of size 4 at 0x1ea5c04 by thread #1

==38631==    at 0x8137: std::_Rb_tree<std::string, std::pair<std::string const, GiNaC::ex>, std::_Select1st<std::pair<std::string const, GiNaC::ex> >, std::less<std::string>, std::allocator<std::pair<std::string const, GiNaC::ex> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, GiNaC::ex> >*) (in main)

==38631==    by 0x92BF: boost::_bi::storage1<boost::_bi::value<worker<double, 2ul> > >::~storage1() (in main)

==38631==    by 0xE0B0: boost::thread* boost::thread_group::create_thread<boost::_bi::bind_t<void, boost::_mfi::mf0<void, worker<double, 2ul> >, boost::_bi::list1<boost::_bi::value<worker<double, 2ul> > > > >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, worker<double, 2ul> >, boost::_bi::list1<boost::_bi::value<mworker<double, 2ul> > > >) (in main)

I have copied the table with 
std::copy( p_syms.begin(),       p_syms.end(),       std::inserter(m_symbols, m_symbols.begin()));

p_syms is the original table and m_symbols should be the copy, but it doesn't work. In my thread object I can use a deep copy of the symbol table, because every thread is independed of the other threads.

I'm not sure that the problem is a GiNaC problem, but you can give some tips perhaps.

Thanks

Phil