> Here's a crash trace, with Aurelien's fix (fewer redraws) and Pirmin's
> catch try. Seems the bug happens anyway:
>
> msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::alloc
> ator<char> >::size() Line 1642 C++
> > QtCore4.dll!QString::fromStdString(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> s={...}) Line 806 + 0x11 bytes C++
> qtwengophone.exe!QtContact::getId() Line 99 + 0x17 bytes C++
> qtwengophone.exe!QtContactManager::moveContact(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> dstGroupId=<Bad Ptr>, const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> srcGroupId=<Bad Ptr>, const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> contactId=<Bad Ptr>) Line 654 + 0x28 bytes C++
> qtwengophone.exe!QtContactList::contactMovedEvent(const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> dstGroupId=<Bad Ptr>, const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> srcGroupId=<Bad Ptr>, const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
> contactId=<Bad Ptr>) Line 213 C++
>
> qtwengophone.exe!CContactList::contactMovedEventHandlerThreadSafe(st
> d::basic_string<char,std::char_traits<char>,std::allocator<char> >
> dstGroupId=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> srcGroupId=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> contactId=<Bad Ptr>) Line 105 C++
>
> qtwengophone.exe!boost::_mfi::mf3<void,CContactList,std::basic_strin
> g<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >::operator()(CContactList * p=0x0ab1fe5c,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a1=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a2=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a3=<Bad Ptr>) Line 353 + 0x65 bytes C++
> qtwengophone.exe!boost::_bi::list4<boost::_bi::value<CContactList
> *>,boost::arg<1>,boost::arg<2>,boost::arg<3>
> >::operator()<boost::_mfi::mf3<void,CContactList,std::basic_string<char,st
> d::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >,boost::_bi::list3<std::basic_string<char,std::char_traits<char>,std::all
> ocator<char> >
> &,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>
> >(boost::_bi::type<void> __formal={...},
> boost::_mfi::mf3<void,CContactList,std::basic_string<char,std::char_traits
> <char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > &
> f={...},
> boost::_bi::list3<std::basic_string<char,std::char_traits<char>,std::alloc
> ator<char> >
> &,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>
> & a={...}, boost::_bi::type<void> __formal={...}) Line 413 C++
>
> qtwengophone.exe!boost::detail::function::void_function_obj_invoker3
> <boost::_bi::bind_t<void,boost::_mfi::mf3<void,CContactList,std::basic_str
> ing<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >,boost::_bi::list4<boost::_bi::value<CContactList
> *>,boost::arg<1>,boost::arg<2>,boost::arg<3> >
> >,void,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >::invoke(boost::detail::function::any_pointer function_obj_ptr={...},
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a0=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a1=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a2=<Bad Ptr>) Line 137 C++
>
> qtwengophone.exe!boost::function3<void,std::basic_string<char,std::c
> har_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::allocator<void>
> >::operator()(std::basic_string<char,std::char_traits<char>,std::allocator
> <char> > a0=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a1=<Bad Ptr>,
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> a2=<Bad Ptr>) Line 576 + 0x66 bytes C++
> qtwengophone.exe!ThreadEvent3<void
> __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >),std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >::callback() Line 161 C++
> qtwengophone.exe!ThreadEventFilter::eventFilter(QObject *
> watched=0x039c1628, QEvent * event=0x105c5740) Line 34 C++
> QtGui4.dll!QApplicationPrivate::notify_helper(QObject *
> receiver=0x039c1628, QEvent * e=0x105c5740) Line 3111 + 0xd bytes
> C++
> QtGui4.dll!QApplication::notify(QObject * receiver=0x039c1628,
> QEvent * e=0x005c5740) Line 2776 + 0x10 bytes C++
> QtCore4.dll!QCoreApplication::sendEvent(QObject *
> receiver=0x039c1628, QEvent * event=0x105c5740) Line 171 + 0x22 bytes
> C++
> QtCore4.dll!QCoreApplication::sendPostedEvents(QObject *
> receiver=0x00000000, int event_type=0x00000000) Line 975 C++
> QtCore4.dll!QEventDispatcherWin32::processEvents(QFlags<enum
> QEventLoop::ProcessEventsFlag> flags={...}) Line 386 + 0x16 bytes
> C++
> QtGui4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum
> QEventLoop::ProcessEventsFlag> flags={...}) Line 958 + 0xf bytes C++
> QtCore4.dll!QEventLoop::processEvents(QFlags<enum
> QEventLoop::ProcessEventsFlag> flags={...}) Line 125 C++
> QtCore4.dll!QEventLoop::exec(QFlags<enum
> QEventLoop::ProcessEventsFlag> flags={...}) Line 164 + 0xc bytes C++
> QtCore4.dll!QCoreApplication::exec() Line 662 + 0x17 bytes C++
> qtwengophone.exe!main(int argc=0x00000001, char * * argv=0x023155d0)
> Line 191 C++
> qtwengophone.exe!__tmainCRTStartup() Line 597 + 0x17 bytes C
> kernel32.dll!7c816fd7()
> [Frames below may be incorrect and/or missing, no symbols loaded for
> kernel32.dll]
I did a little research and something strange is happening here in the stack
trace.
The call to eventFilter
ThreadEventFilter::eventFilter(QObject * watched=0x039c1628, QEvent *
event=0x105c5740) Line 34 C++
is not doing what I would expect. Below the code of the method (it crashes
on the call to threadEvent->callback()):
--code--
bool ThreadEventFilter::eventFilter(QObject * watched, QEvent * event) {
if (event->type() == QtThreadEvent::EventValue) {
QtThreadEvent * threadEvent = (QtThreadEvent *) event;
threadEvent->callback();
return true;
}
return QObject::eventFilter(watched, event);
}
--code--
The code for QtThreadEvent::callback() is the following (line 56) which is
what we would expect to be called based on the cast:
--code--
void callback() {
_threadEventPrivate->callback();
}
--code--
but this method is not called. Instead, this other method is called.
> qtwengophone.exe!ThreadEvent3<void
> __cdecl(std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >),std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >::callback() Line 161 C++
Once this method is called, if you look above it in the stack trace, all the
pointers that are passed are garbage.
Hope this helps,
-Lukas
_______________________________________________
Wengophone-devel mailing list
[email protected]
http://dev.openwengo.com/mailman/listinfo/wengophone-devel