Status: Untriaged
Owner: b...@chromium.org
CC: s...@chromium.org,  erik...@chromium.org
Labels: Type-Bug Pri-1 OS-All Area-BrowserUI Size-Medium

New issue 18248 by erik...@chromium.org: crash after deleting WidgetWin  
during event handler
http://code.google.com/p/chromium/issues/detail?id=18248

In ExtensionShelf, I'm using a WidgetWin as a container for the expanded or  
dragging version of a toolstrip.  In the
expanded view, clicking on the handle (part of the WidgetWin) causes the  
toolstrip to collapse and be hidden (via
OnMouseReleased).  If I destroy the WidgetWin during this time, I'll crash  
shortly afterwards.  I'm able to work around the
bug by hiding/destroying after a short delay.

Here's a Purify dump of the errors:

             [E] FMR: Free memory read in  
views::WidgetWin::IsMsgHandled(void)const {1 occurrence}
                 Reading 4 bytes from 0x16512580 (4 bytes at 0x16512580  
illegal)
                 Address 0x16512580 is 16 bytes into a 100 byte block at  
0x16512570
                 Address 0x16512580 points to a C++ new block in heap  
0x005e0000
                 Thread ID: 0x21c58
                 Error location
                 views::WidgetWin::IsMsgHandled(void)const  
[e:\git\src\views\widget\widget_win.h:112]
                 views::WidgetWin::_ProcessWindowMessage(HWND__  
*,UINT,UINT,long,long&,DWORD)
[e:\git\src\views\widget\widget_win.h:158]
                 views::WidgetWin::ProcessWindowMessage(HWND__  
*,UINT,UINT,long,long&,DWORD)
[e:\git\src\views\widget\widget_win.h:112]
                 views::WidgetWin::WndProc(HWND__ *,UINT,UINT,long)  
[e:\git\src\views\widget\widget_win.cc:1055]
                     return result;

                   // Otherwise we handle everything else.
              =>   if (!widget->ProcessWindowMessage(window, message,  
w_param, l_param, result))
                     result = DefWindowProc(window, message, w_param,  
l_param);
                   if (message == WM_NCDESTROY)
                     widget->OnFinalMessage(window);
                 GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
                 views::AcceleratorHandler::Dispatch(tagMSG const&)  
[e:\git\src\views\focus\accelerator_handler_win.cc:38]

                   if (process_message) {
                     TranslateMessage(&msg);
              =>     DispatchMessage(&msg);
                   }

                   return true;
                 base::MessagePumpForUI::ProcessMessageHelper(tagMSG const&)  
[e:\git\src\base\message_pump_win.cc:357]
                 base::MessagePumpForUI::ProcessPumpReplacementMessage(void)  
[e:\git\src\base\message_pump_win.cc:396]
                 base::MessagePumpForUI::ProcessMessageHelper(tagMSG const&)  
[e:\git\src\base\message_pump_win.cc:352]
                 base::MessagePumpForUI::ProcessNextWindowsMessage(void)  
[e:\git\src\base\message_pump_win.cc:336]
                 base::MessagePumpForUI::DoRunLoop(void)  
[e:\git\src\base\message_pump_win.cc:205]
                  
base::MessagePumpWin::RunWithDispatcher(Delegate::MessagePump::base  
*,Dispatcher::MessagePumpWin::base *)
[e:\git\src\base\message_pump_win.cc:52]
                 MessageLoop::RunInternal(void)  
[e:\git\src\base\message_loop.cc:194]
                 MessageLoop::RunHandler(void)  
[e:\git\src\base\message_loop.cc:181]
                 MessageLoopForUI::Run(Dispatcher::MessagePumpWin::base *)  
[e:\git\src\base\message_loop.cc:599]
                 ?A0xea436775::RunUIMessageLoop(BrowserProcess *)  
[e:\git\src\chrome\browser\browser_main.cc:196]
                 BrowserMain(MainFunctionParams const&)  
[e:\git\src\chrome\browser\browser_main.cc:789]
                 ChromeMain      
[e:\git\src\chrome\app\chrome_dll_main.cc:540]
                 wWinMain        
[e:\git\src\chrome\app\chrome_exe_main.cc:102]
                 _tmainCRTStartup  
[f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c:324]
                 Allocation location
                 new(UINT)       
[f:\dd\vctools\crt_bld\self_x86\crt\src\new.cpp:57]
                 BrowserBubble::InitPopup(void)  
[e:\git\src\chrome\browser\views\browser_bubble_win.cc:14]

                 void BrowserBubble::InitPopup() {
                   gfx::NativeWindow native_window =  
frame_->GetWindow()->GetNativeWindow();
              =>   views::WidgetWin* pop = new views::WidgetWin();
                   pop->set_delete_on_destroy(false);
                   pop->set_window_style(WS_POPUP);
                 #if 0
                 BrowserBubble::BrowserBubble(View::views *,Widget::views  
*,Point::gfx const&)
[e:\git\src\chrome\browser\views\browser_bubble.cc:22]
                 ExtensionShelf::Toolstrip::GetHandle(void)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:356]
                 ExtensionShelf::Toolstrip::DoShowShelfHandle(void)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:444]
                 ExtensionShelf::Toolstrip::Expand(int,GURL const&)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:469]

ExtensionShelf::ToolstripChanged(_Vector_iterator<ToolstripItem::ExtensionShelfModel,allocator<ToolstripItem::ExtensionShel
fModel>::std>::std)  
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:703]

ExtensionShelfModel::ExpandToolstrip(_Vector_iterator<ToolstripItem::ExtensionShelfModel,allocator<ToolstripItem::Extension
ShelfModel>::std>::std,GURL const&,int)  
[e:\git\src\chrome\browser\extensions\extension_shelf_model.cc:134]
                 ToolstripExpandFunction::RunImpl(void)  
[e:\git\src\chrome\browser\extensions\extension_toolstrip_api.cc:88]
                 SyncExtensionFunction::Run(void)  
[e:\git\src\chrome\browser\extensions\extension_function.h:152]

ExtensionFunctionDispatcher::HandleRequest(basic_string<char,char_traits<char>::std,allocator<char>::std>::std
const&,basic_string<char,char_traits<char>::std,allocator<char>::std>::std  
const&,int,bool)
[e:\git\src\chrome\browser\extensions\extension_function_dispatcher.cc:238]
                  
ExtensionHost::ProcessDOMUIMessage(basic_string<char,char_traits<char>::std,allocator<char>::std>::std
const&,basic_string<char,char_traits<char>::std,allocator<char>::std>::std  
const&,int,bool)
[e:\git\src\chrome\browser\extensions\extension_host.cc:254]
                  
RenderViewHost::OnExtensionRequest(basic_string<char,char_traits<char>::std,allocator<char>::std>::std
const&,basic_string<char,char_traits<char>::std,allocator<char>::std>::std  
const&,int,bool)
[e:\git\src\chrome\browser\renderer_host\render_view_host.cc:1590]
                 
?dispatchtomet...@vrenderviewhost@@p...@aexabv?$basic_string@du?$char_tra...@d@std@@V?
$alloca...@d@2@@std@@0...@zv23@v...@h_n@@YAXPAVRenderViewHost@@p...@aexabv?$basic_string@du?$char_tra...@d@std@@V?
$alloca...@d@2@@std@@1...@zabu?$tuple4@v?$basic_str...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@v...@h_n@@@Z
[e:\git\src\base\tuple.h:441]
                 
?dispa...@vrenderviewhost@@p...@aexabv?$basic_string@du?$char_tra...@d@std@@v?$alloca...@d@2@@std@@0...@z@?
$messagewithtu...@u?$tuple4@v?$basic_str...@du?$char_traits@d...@std@@V?
$alloca...@d@2@@std@@v...@h_n@@@IPC@@sa_npbvmess...@1@PAVRenderViewHost@@p...@aexabv?$basic_string@du?$char_tra...@d@std@@V?
$alloca...@d@2@@std@@2...@z@Z [e:\git\src\ipc\ipc_message_utils.h:944]
                 RenderViewHost::OnMessageReceived(Message::IPC const&)
[e:\git\src\chrome\browser\renderer_host\render_view_host.cc:812]
                 BrowserRenderProcessHost::OnMessageReceived(Message::IPC  
const&)
[e:\git\src\chrome\browser\renderer_host\browser_render_process_host.cc:778]
                 IPC::ChannelProxy::Context::OnDispatchMessage(Message::IPC  
const&)
[e:\git\src\ipc\ipc_channel_proxy.cc:204]
                 ?
dispatchtomet...@vcontext@channelpr...@ipc@@p8...@aexabvmessage@3@@ZV43@@@yaxpavcont...@channelproxy@IPC@@p8...@aexabvmessa
g...@2@@zabu?$tup...@vmessage@IPC@@@@@Z [e:\git\src\base\tuple.h:422]
                 RunnableMethod<class IPC::ChannelProxy::Context,void (  
IPC::ChannelProxy::Context::*)(class IPC::Message
const &),struct Tuple1<class IPC::Message> >::Run(void)  
[e:\git\src\base\task.h:307]
                 MessageLoop::RunTask(Task *)  
[e:\git\src\base\message_loop.cc:314]
                 MessageLoop::DeferOrRunPendingTask(PendingTask::MessageLoop  
const&) [e:\git\src\base\message_loop.cc:322]
                 MessageLoop::DoWork(void)  
[e:\git\src\base\message_loop.cc:429]
                 base::MessagePumpForUI::DoRunLoop(void)  
[e:\git\src\base\message_pump_win.cc:209]
                  
base::MessagePumpWin::RunWithDispatcher(Delegate::MessagePump::base  
*,Dispatcher::MessagePumpWin::base *)
[e:\git\src\base\message_pump_win.cc:52]
                 MessageLoop::RunInternal(void)  
[e:\git\src\base\message_loop.cc:194]
                 MessageLoop::RunHandler(void)  
[e:\git\src\base\message_loop.cc:181]
                 MessageLoopForUI::Run(Dispatcher::MessagePumpWin::base *)  
[e:\git\src\base\message_loop.cc:599]
                 ?A0xea436775::RunUIMessageLoop(BrowserProcess *)  
[e:\git\src\chrome\browser\browser_main.cc:196]
                 BrowserMain(MainFunctionParams const&)  
[e:\git\src\chrome\browser\browser_main.cc:789]
             Free location
                 delete(void *)  
[f:\dd\vctools\crt_bld\self_x86\crt\src\delete.cpp:23]
                 views::WidgetWin::`vector deleting destructor'(UINT)  
[E:\GIT\SRC\CHROME\RELEASE\CHROME.DLL]
                 scoped_ptr<Widget::views>::~scoped_ptr<Widget::views>(void)  
[e:\git\src\base\scoped_ptr.h:72]
                 BrowserBubble::~BrowserBubble(void)  
[e:\git\src\chrome\browser\views\browser_bubble.cc:34]
                 BrowserBubble::`scalar deleting destructor'(UINT)  
[E:\GIT\SRC\CHROME\RELEASE\CHROME.DLL]
                 scoped_ptr<BrowserBubble>::reset(BrowserBubble *)  
[e:\git\src\base\scoped_ptr.h:81]
                 ExtensionShelf::Toolstrip::DoHideShelfHandle(void)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:457]
                 ExtensionShelf::Toolstrip::Collapse(GURL const&)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:512]

ExtensionShelf::ToolstripChanged(_Vector_iterator<ToolstripItem::ExtensionShelfModel,allocator<ToolstripItem::ExtensionShel
fModel>::std>::std)  
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:706]

ExtensionShelfModel::CollapseToolstrip(_Vector_iterator<ToolstripItem::ExtensionShelfModel,allocator<ToolstripItem::Extensi
onShelfModel>::std>::std,GURL const&)  
[e:\git\src\chrome\browser\extensions\extension_shelf_model.cc:144]
                 ExtensionShelf::CollapseToolstrip(ExtensionHost *,GURL  
const&)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:767]
                  
ExtensionShelf::Toolstrip::OnMouseReleased(MouseEvent::views const&,bool)
[e:\git\src\chrome\browser\views\extensions\extension_shelf.cc:345]
                 views::View::ProcessMouseReleased(MouseEvent::views  
const&,bool) [e:\git\src\views\view.cc:503]
                 views::RootView::OnMouseReleased(MouseEvent::views  
const&,bool) [e:\git\src\views\widget\root_view.cc:453]
                 views::WidgetWin::ProcessMouseReleased(CPoint::WTL  
const&,UINT) [e:\git\src\views\widget\widget_win.cc:841]
                 views::WidgetWin::OnLButtonUp(UINT,CPoint::WTL const&)  
[e:\git\src\views\widget\widget_win.cc:611]
                 views::WidgetWin::_ProcessWindowMessage(HWND__  
*,UINT,UINT,long,long&,DWORD)
[e:\git\src\views\widget\widget_win.h:158]
                 views::WidgetWin::ProcessWindowMessage(HWND__  
*,UINT,UINT,long,long&,DWORD)
[e:\git\src\views\widget\widget_win.h:112]
                 views::WidgetWin::WndProc(HWND__ *,UINT,UINT,long)  
[e:\git\src\views\widget\widget_win.cc:1055]
                 GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
                 views::AcceleratorHandler::Dispatch(tagMSG const&)  
[e:\git\src\views\focus\accelerator_handler_win.cc:38]
                 base::MessagePumpForUI::ProcessMessageHelper(tagMSG const&)  
[e:\git\src\base\message_pump_win.cc:357]
                 base::MessagePumpForUI::ProcessPumpReplacementMessage(void)  
[e:\git\src\base\message_pump_win.cc:396]
                 base::MessagePumpForUI::ProcessMessageHelper(tagMSG const&)  
[e:\git\src\base\message_pump_win.cc:352]
                 base::MessagePumpForUI::ProcessNextWindowsMessage(void)  
[e:\git\src\base\message_pump_win.cc:336]
                 base::MessagePumpForUI::DoRunLoop(void)  
[e:\git\src\base\message_pump_win.cc:205]
                  
base::MessagePumpWin::RunWithDispatcher(Delegate::MessagePump::base  
*,Dispatcher::MessagePumpWin::base *)
[e:\git\src\base\message_pump_win.cc:52]
                 MessageLoop::RunInternal(void)  
[e:\git\src\base\message_loop.cc:194]
                 MessageLoop::RunHandler(void)  
[e:\git\src\base\message_loop.cc:181]
                 MessageLoopForUI::Run(Dispatcher::MessagePumpWin::base *)  
[e:\git\src\base\message_loop.cc:599]




--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
Automated mail from issue updates at http://crbug.com/
Subscription options: http://groups.google.com/group/chromium-bugs
-~----------~----~----~----~------~----~------~--~---

Reply via email to