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]