Boost logo

Boost Users :

Subject: [Boost-users] [Interprocess] or [Container]: Error with internally in rbtree_best_fit deallocation
From: David Schneider (dave_at_[hidden])
Date: 2015-08-05 15:51:03


Hello,

I've been upgrading a Windows 3.0 industrial control suite that relies
heavily on GlobalAlloc() etc. I've used Boost's IPC functions to create
a replacement that works very, very well for multiple applications so far.

I'm using Boost 1.57 or 1.58, both exhibit the same behavior, across
Windows 7, 8.1 & 10 64-bit, with 32-bit applications, compiled in Visual
Studio 2013. All code displayed is from 1.58 but I don't see it being
materially different from 1.57 in this case.

Unfortunately, I've come up against an issue I can't best. 6 or 7 of the
applications are working more or less without hitches, but I've come to
port the last one and rbtree_best_fit is messing up pretty badly. It
happens during a destruct operation on a vector. It always, always
happens on the same vector, and I can even watch all operations on it by
pre-allocating it large because rbtree_best_fit will reliably assign the
same address (in every application, a 64mb memory pool is mapped into
the same address space)

What happens is the vector gets constructed with a UUID generated by
Boost as its identifier. (A handle including a pointer to said vector
goes into an interprocess map, but that's another story).

Here's the typedefs used to create the memory pool & vector:

namespace ipc = boost::interprocess;
typedef ipc::managed_windows_shared_memory managed_pool_t;
typedef managed_pool_t::segment_manager managed_pool_segment_manager_t;
typedef ipc::allocator < char, managed_pool_segment_manager_t >
managed_pool_allocator_t;
typedef ipc::vector< char, managed_pool_allocator_t > GLE_handle_vector_t;

How it is constructed:

GLE_handle_vector_t *foo;
  foo =
_managed_pool->construct<GLE_handle_vector_t>(uuid_str)(_managed_pool->get_segment_manager());
foo->resize((GLE_handle_vector_t::size_type)dwBytes); // dwBytes has
some added to it in this case to prevent the need to re-allocate the
vector's data buffer

Later on it is resized at least 12 times:

mvector->resize(dwBytes);

Then something goes to free it.
_managed_pool->destroy<GLE_handle_vector_t>(UUID);

Keep in mind that this has worked for 6 other programs all sharing
memory at the same time over at least a hundred hours of running-time so
far.

Yes, I have checked that the UUID is correct. I get, of course, an
extremely long template error. I'll include it at the end. The relevant
part is this:

> w16gle.dll!boost::interprocess::operator<(const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & a, const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & b) Line 126 C++

The offending line is:

{ return a.m_size < b.m_size; }

Going into the immediate window,

&a
0x700a434c {...}
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::SizeHolder: {m_prev_size=??? m_size=??? m_prev_allocated=??? ...}
boost::intrusive::generic_hook<boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1> >,boost::intrusive::dft_tag,0,3>: {...}

&b
0x3f09bed8 {...}
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::SizeHolder: {m_prev_size=0 m_size=513 m_prev_allocated=1 ...}
boost::intrusive::generic_hook<boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1> >,boost::intrusive::dft_tag,0,3>: {...}

B's address is correct. I have no idea where it is getting A's address,
especially since it is passed by reference. Inspecting the memory all
around that location reveals that it is not allocated. My understanding
is that at this point the code is trying to merge this block with the
next free one, but that's as far as I got understanding it. I've tried
tracing the call stack thoroughly but it goes through some "external
code" on the call stack just before this error.

w16gle.dll!boost::interprocess::operator<(const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & a, const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & b) Line 126 C++
*_[External Code]_*
w16gle.dll!boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>
>::operator()<boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0>,boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & key1, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & key2) Line 78 C++

_I would be happy to just use the simple_seq_fit allocator to avoid this
bug_, since it would do fine for this, but when I typedef it...

namespace boost {
namespace interprocess {
typedef basic_managed_windows_shared_memory<char,
simple_seq_fit<mutex_family>, iset_index> managed_windows_shared_seq_memory;
}
}

and use it, I get compilation errors:

c:\boost\include\boost-1_58\boost\interprocess\managed_windows_shared_memory.hpp(45):
error C2027: use of undefined type
'boost::interprocess::simple_seq_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,ptrdiff_t,size_t,0>>'
1>
c:\boost\include\boost-1_58\boost\interprocess\managed_windows_shared_memory.hpp(70)
: see reference to class template instantiation
'boost::interprocess::ipcdetail::wshmem_open_or_create<AllocationAlgorithm>'
being compiled
1> with

.... there's over 100 of them. No way I'm figuring that out.

Please help me. Is there some way to troubleshoot what rbtree_best_fit
is doing wrong? If a Boost developer wants to have a private discussion
with me on the matter please feel free to contact me, since there's
obviously a bug somewhere, I might be open to that. Alternatively, how
do I get the seq_best_fit to work?

Thank you for your help!

Here is the whole call stack during the access violation with
rbtree_best_fit that I referred to above.

> w16gle.dll!boost::interprocess::operator<(const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & a, const
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & b) Line 126 C++
      [External Code]
w16gle.dll!boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>
>::operator()<boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0>,boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & key1, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & key2) Line 78 C++
w16gle.dll!boost::intrusive::bstree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>
>::insert_equal_lower_bound_check<boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & h, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & new_node, boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > comp, boost::intrusive::insert_commit_data_t<boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> > & commit_data, unsigned int * pdepth) Line 1692 C++
w16gle.dll!boost::intrusive::bstree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>
>::insert_equal_check<boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & header, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & hint, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & new_node, boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > comp, boost::intrusive::insert_commit_data_t<boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> > & commit_data, unsigned int * pdepth) Line 1657 C++
w16gle.dll!boost::intrusive::bstree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>
>::insert_equal<boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & h, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & hint, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & new_node, boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > comp, unsigned int * pdepth) Line 1121 C++
w16gle.dll!boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>
>::insert_equal<boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > >(const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & header, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & hint, const boost::interprocess::offset_ptr<boost::intrusive::compact_rbtree_node<boost::interprocess::offset_ptr<void,int,unsigned int,0> >,int,unsigned int,0> & new_node, boost::intrusive::detail::key_nodeptr_comp<std::less<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl>,boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned int,0>,1>,0,boost::intrusive::dft_tag,3> > comp) Line 374 C++
w16gle.dll!boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>,void,unsigned
int,1,5,void>::insert_equal(boost::intrusive::tree_iterator<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>,1> hint,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & value) Line 1039 C++
w16gle.dll!boost::intrusive::multiset_impl<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>,void,unsigned
int,1,void>::insert(boost::intrusive::tree_iterator<boost::intrusive::bhtraits<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl,boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void,int,unsigned
int,0>,1>,0,boost::intrusive::dft_tag,3>,1> hint,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::block_ctrl & value) Line 656 C++
w16gle.dll!boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::priv_deallocate(void * addr) Line 1390 C++
w16gle.dll!boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>::deallocate(void * addr) Line 1321 C++
w16gle.dll!boost::interprocess::segment_manager_base<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0> >::deallocate(void * addr) Line 227 C++
w16gle.dll!boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index> >::deallocate(const
boost::interprocess::offset_ptr<char,int,unsigned int,0> & ptr, unsigned
int __formal) Line 159 C++
w16gle.dll!boost::container::container_detail::vector_alloc_holder<boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index>
>,boost::container::container_detail::integral_constant<unsigned int,2>
>::~vector_alloc_holder<boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>,boost::interprocess::iset_index> >,boost::container::container_detail::integral_constant<unsigned int,2> >() Line 395 C++
w16gle.dll!boost::container::vector<char,boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index> >
>::~vector<char,boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned int,0>,0>,boost::interprocess::iset_index> > >() Line 985 C++
      [External Code]
w16gle.dll!boost::interprocess::ipcdetail::placement_destroy<boost::container::vector<char,boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index> > > >::destroy_n(void * mem,
unsigned int num, unsigned int & destroyed) Line 61 C++
w16gle.dll!boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index>::priv_generic_named_destroy<char>(const
char * name,
boost::interprocess::iset_index<boost::interprocess::ipcdetail::index_config<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0> > > & index,
boost::interprocess::ipcdetail::in_place_interface & table,
boost::interprocess::ipcdetail::bool_<1> is_intrusive_index) Line 975 C++
w16gle.dll!boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index>::destroy<boost::container::vector<char,boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index> > >
>(boost::interprocess::ipcdetail::char_ptr_holder<char> name) Line
538 C++
w16gle.dll!boost::interprocess::ipcdetail::basic_managed_memory_impl<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index,8>::destroy<boost::container::vector<char,boost::interprocess::allocator<char,boost::interprocess::segment_manager<char,boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,boost::interprocess::offset_ptr<void,int,unsigned
int,0>,0>,boost::interprocess::iset_index> > > >(const char * name) Line
568 C++
      w16gle.dll!global_mem::GlobalFree(void * hMem, bool
ignore_invalid) Line 904 C++
      w16gle.dll!GLEGlobalFree(void * hMem, bool ignore_invalid) Line
175 C++
      w_menu32.dll!CreateVUBreakTabList(HWND__ * hWnd, unsigned short
Index, unsigned short BreakTabAant) Line 723 C++
      w_comm.exe!TestNieuweTabel() Line 163 C++
      w_comm.exe!CommTimer(HWND__ * hWnd) Line 552 C++
      w_comm.exe!WndProc(HWND__ * hWnd, unsigned int message, unsigned
int wParam, long lParam) Line 365 C++
      [External Code]
      [Frames below may be incorrect and/or missing, no symbols loaded
for user32.dll]
      w_bars32.dll!CallOldProc(HWND__ * Wnd, unsigned int Msg, unsigned
int wParam, long lParam, long hookkey) Line 126 C++
      w_bars32.dll!SubclassParWndProc(HWND__ * Wnd, unsigned short Msg,
unsigned int wParam, long lParam) Line 104 C++
      [External Code]
      w_comm.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ *
hPrevInstance, char * lpCmdLine, int nCmdShow) Line 191 C++
      [External Code]



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net