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]