Closed Bug 400448 Opened 17 years ago Closed 16 years ago

particular places.sqlite freezes browser when attempting to open "Recently Starred Pages, Recently Used Tags or Most Used Tags"

Categories

(Firefox :: Bookmarks & History, defect, P2)

defect

Tracking

()

RESOLVED WORKSFORME
Firefox 3

People

(Reporter: moco, Assigned: dietrich)

Details

(Whiteboard: [swag .5d])

Attachments

(3 files, 1 obsolete file)

particular places.sqlite freezes browser when attempting to open "Recently Starred Pages, Recently Used Tags or Most Used Tags"

thanks to coce for telling us about this in #testday

I have his places.sqlite file and I can reproduce the bug.

We are stuck in a while loop in nsNavHistory::FilterResultSet() because bookmarks->GetFolderIdForItem(ancestor,&ancestor) is not failing, yet it is returning the same value for the ancestor.

we think the parent of item 156 is 156, so we loop forever.

I'll go look directly at his places.sqlite file to verify.

Here's the stack:

>	places.dll!nsNavHistory::FilterResultSet(nsNavHistoryQueryResultNode * aQueryNode=0x06bd4080, const nsCOMArray<nsNavHistoryResultNode> & aSet={...}, nsCOMArray<nsNavHistoryResultNode> * aFiltered=0x06bd40f8, const nsCOMArray<nsNavHistoryQuery> & aQueries={...}, nsNavHistoryQueryOptions * aOptions=0x06b8b320)  Line 4400	C++
 	places.dll!nsNavHistory::GetQueryResults(nsNavHistoryQueryResultNode * aResultNode=0x06bd4080, const nsCOMArray<nsNavHistoryQuery> & aQueries={...}, nsNavHistoryQueryOptions * aOptions=0x06b8b320, nsCOMArray<nsNavHistoryResultNode> * aResults=0x06bd40f8)  Line 2496	C++
 	places.dll!nsNavHistoryQueryResultNode::FillChildren()  Line 2192 + 0x38 bytes	C++
 	places.dll!nsNavHistoryQueryResultNode::OpenContainer()  Line 2034 + 0x8 bytes	C++
 	places.dll!nsNavHistoryContainerResultNode::SetContainerOpen(int aContainerOpen=1)  Line 367	C++
 	places.dll!nsNavHistoryQueryResultNode::SetContainerOpen(int aContainerOpen=1)  Line 687 + 0x10 bytes	C++
 	xpcom_core.dll!NS_InvokeByIndex_P(nsISupports * that=0x00000013, unsigned int methodIndex=1, unsigned int paramCount=1220792, nsXPTCVariant * params=0x034c2fbf)  Line 102	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=19)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=CALL_SETTER)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPCWrappedNative::SetAttribute(XPCCallContext & ccx={...})  Line 2082 + 0xe bytes	C++
 	xpc3250.dll!XPC_WN_GetterSetter(JSContext * cx=0x055d8388, JSObject * obj=0x05ae1e00, unsigned int argc=1, long * argv=0x06bb7ea0, long * vp=0x0012a37c)  Line 1491 + 0xc bytes	C++
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7e98, unsigned int flags=2)  Line 1382 + 0x20 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x05ae1e00, long fval=95291840, unsigned int flags=0, unsigned int argc=1, long * argv=0x0012aa5c, long * rval=0x0012aa5c)  Line 1458 + 0x18 bytes	C
 	js3250.dll!js_InternalGetOrSet(JSContext * cx=0x055d8388, JSObject * obj=0x05ae1e00, long id=66665132, long fval=95291840, JSAccessMode mode=JSACC_WRITE, unsigned int argc=1, long * argv=0x0012aa5c, long * rval=0x0012aa5c)  Line 1523 + 0x1f bytes	C
 	js3250.dll!js_NativeSet(JSContext * cx=0x055d8388, JSObject * obj=0x05ae1e00, JSScopeProperty * sprop=0x06adb240, long * vp=0x0012aa5c)  Line 3569 + 0x32 bytes	C
 	js3250.dll!js_SetProperty(JSContext * cx=0x055d8388, JSObject * obj=0x05ae1e00, long id=66665132, long * vp=0x0012aa5c)  Line 3828 + 0x15 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x05185c7b, long * result=0x0012ab7c)  Line 3843 + 0x147 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7d50, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	xpc3250.dll!nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS * wrapper=0x06bd6310, unsigned short methodIndex=23, const XPTMethodDescriptor * info=0x043a3958, nsXPTCMiniVariant * nativeParams=0x0012ae78)  Line 1443 + 0x1b bytes	C++
 	xpc3250.dll!nsXPCWrappedJS::CallMethod(unsigned short methodIndex=23, const XPTMethodDescriptor * info=0x043a3958, nsXPTCMiniVariant * params=0x0012ae78)  Line 566	C++
 	xpcom_core.dll!PrepareAndDispatch(nsXPTCStubBase * self=0x06aeb888, unsigned int methodIndex=23, unsigned int * args=0x0012af38, unsigned int * stackBytesToPop=0x0012af28)  Line 114 + 0x21 bytes	C++
 	xpcom_core.dll!SharedStub()  Line 142	C++
 	gklayout.dll!nsTreeBodyFrame::SetView(nsITreeView * aView=0x06a44218)  Line 535	C++
 	gklayout.dll!nsTreeBodyFrame::SetView(nsITreeView * aView=0x06aeb888)  Line 535	C++
 	gklayout.dll!nsTreeBoxObject::SetView(nsITreeView * aView=0x06aeb888)  Line 205	C++
 	xpcom_core.dll!NS_InvokeByIndex_P(nsISupports * that=0x00000005, unsigned int methodIndex=1, unsigned int paramCount=1225056, nsXPTCVariant * params=0x04a70780)  Line 102	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=5)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=CALL_SETTER)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPCWrappedNative::SetAttribute(XPCCallContext & ccx={...})  Line 2082 + 0xe bytes	C++
 	xpc3250.dll!XPC_WN_GetterSetter(JSContext * cx=0x055d8388, JSObject * obj=0x04ab12c0, unsigned int argc=1, long * argv=0x06bb7d4c, long * vp=0x0012b424)  Line 1491 + 0xc bytes	C++
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7d44, unsigned int flags=2)  Line 1382 + 0x20 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04ab12c0, long fval=78650816, unsigned int flags=0, unsigned int argc=1, long * argv=0x0012bb04, long * rval=0x0012bb04)  Line 1458 + 0x18 bytes	C
 	js3250.dll!js_InternalGetOrSet(JSContext * cx=0x055d8388, JSObject * obj=0x04ab12c0, long id=67244108, long fval=78650816, JSAccessMode mode=JSACC_WRITE, unsigned int argc=1, long * argv=0x0012bb04, long * rval=0x0012bb04)  Line 1523 + 0x1f bytes	C
 	js3250.dll!js_NativeSet(JSContext * cx=0x055d8388, JSObject * obj=0x04ab12c0, JSScopeProperty * sprop=0x06adc270, long * vp=0x0012bb04)  Line 3569 + 0x32 bytes	C
 	js3250.dll!js_SetProperty(JSContext * cx=0x055d8388, JSObject * obj=0x04ab12c0, long id=67244108, long * vp=0x0012bb04)  Line 3828 + 0x15 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x06a5bbc8, long * result=0x0012bc24)  Line 3843 + 0x147 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7d0c, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long fval=78121632, unsigned int flags=0, unsigned int argc=1, long * argv=0x0012c230, long * rval=0x0012c230)  Line 1458 + 0x18 bytes	C
 	js3250.dll!js_InternalGetOrSet(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long id=67244108, long fval=78121632, JSAccessMode mode=JSACC_WRITE, unsigned int argc=1, long * argv=0x0012c230, long * rval=0x0012c230)  Line 1523 + 0x1f bytes	C
 	js3250.dll!js_SetProperty(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long id=67244108, long * vp=0x0012c230)  Line 3759 + 0x32 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x06a35cf6, long * result=0x0012c350)  Line 3843 + 0x147 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7c1c, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long fval=78122016, unsigned int flags=0, unsigned int argc=1, long * argv=0x0012c95c, long * rval=0x0012c95c)  Line 1458 + 0x18 bytes	C
 	js3250.dll!js_InternalGetOrSet(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long id=67244836, long fval=78122016, JSAccessMode mode=JSACC_WRITE, unsigned int argc=1, long * argv=0x0012c95c, long * rval=0x0012c95c)  Line 1523 + 0x1f bytes	C
 	js3250.dll!js_SetProperty(JSContext * cx=0x055d8388, JSObject * obj=0x04a926e0, long id=67244836, long * vp=0x0012c95c)  Line 3759 + 0x32 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x04f5095f, long * result=0x0012ca7c)  Line 3843 + 0x147 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7be8, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04a51c00, long fval=77929728, unsigned int flags=0, unsigned int argc=1, long * argv=0x0012d0dc, long * rval=0x0012d0dc)  Line 1458 + 0x18 bytes	C
 	js3250.dll!js_InternalGetOrSet(JSContext * cx=0x055d8388, JSObject * obj=0x04a51c00, long id=61552700, long fval=77929728, JSAccessMode mode=JSACC_WRITE, unsigned int argc=1, long * argv=0x0012d0dc, long * rval=0x0012d0dc)  Line 1523 + 0x1f bytes	C
 	js3250.dll!js_NativeSet(JSContext * cx=0x055d8388, JSObject * obj=0x04a51c00, JSScopeProperty * sprop=0x069982e4, long * vp=0x0012d0dc)  Line 3569 + 0x32 bytes	C
 	js3250.dll!js_SetProperty(JSContext * cx=0x055d8388, JSObject * obj=0x04a51c00, long id=61552700, long * vp=0x0012d0dc)  Line 3828 + 0x15 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x055976a0, long * result=0x0012d1fc)  Line 3843 + 0x147 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7b04, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04a81360, long fval=78649536, unsigned int flags=0, unsigned int argc=1, long * argv=0x06bb7b00, long * rval=0x0012d324)  Line 1458 + 0x18 bytes	C
 	js3250.dll!JS_CallFunctionValue(JSContext * cx=0x055d8388, JSObject * obj=0x04a81360, long fval=78649536, unsigned int argc=1, long * argv=0x06bb7b00, long * rval=0x0012d324)  Line 4877 + 0x1f bytes	C
 	gklayout.dll!nsJSContext::CallEventHandler(nsISupports * aTarget=0x056228b0, void * aScope=0x04a30be0, void * aHandler=0x04b018c0, nsIArray * aargv=0x06ba1870, nsIVariant * * arv=0x0012d4f0)  Line 1840 + 0x24 bytes	C++
 	gklayout.dll!nsJSEventListener::HandleEvent(nsIDOMEvent * aEvent=0x06bbe088)  Line 224 + 0x67 bytes	C++
 	gklayout.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x05622be8, nsIDOMEventListener * aListener=0x05622b98, nsIDOMEvent * aDOMEvent=0x06bbe088, nsISupports * aCurrentTarget=0x056228b0, unsigned int aPhaseFlags=6)  Line 1097 + 0x12 bytes	C++
 	gklayout.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x04f50c68, nsEvent * aEvent=0x0012d86c, nsIDOMEvent * * aDOMEvent=0x0012d7c0, nsISupports * aCurrentTarget=0x056228b0, unsigned int aFlags=6, nsEventStatus * aEventStatus=0x0012d7c4)  Line 1217	C++
 	gklayout.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6)  Line 207	C++
 	gklayout.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6, nsDispatchingCallback * aCallback=0x00000000)  Line 266	C++
 	gklayout.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x056228b0, nsPresContext * aPresContext=0x04f50c68, nsEvent * aEvent=0x0012d86c, nsIDOMEvent * aDOMEvent=0x00000000, nsEventStatus * aEventStatus=0x0012d868, nsDispatchingCallback * aCallback=0x00000000)  Line 479 + 0x12 bytes	C++
 	gklayout.dll!nsTreeSelection::FireOnSelectHandler()  Line 839 + 0x23 bytes	C++
 	gklayout.dll!nsTreeSelection::Select(int aIndex=3)  Line 390	C++
 	xpcom_core.dll!NS_InvokeByIndex_P(nsISupports * that=0x00000008, unsigned int methodIndex=1, unsigned int paramCount=1235596, nsXPTCVariant * params=0x00000000)  Line 102	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=8)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPCWrappedNative::CallMethod(XPCCallContext & ccx={...}, XPCWrappedNative::CallMode mode=CALL_METHOD)  Line 2326 + 0x1e bytes	C++
 	xpc3250.dll!XPC_WN_CallMethod(JSContext * cx=0x055d8388, JSObject * obj=0x04b036a0, unsigned int argc=1, long * argv=0x06bb7ae4, long * vp=0x0012dd3c)  Line 1467 + 0xe bytes	C++
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7adc, unsigned int flags=0)  Line 1382 + 0x20 bytes	C
 	js3250.dll!js_Interpret(JSContext * cx=0x055d8388, unsigned char * pc=0x06bba3c1, long * result=0x0012e408)  Line 4092 + 0x16 bytes	C
 	js3250.dll!js_Invoke(JSContext * cx=0x055d8388, unsigned int argc=1, long * vp=0x06bb7a9c, unsigned int flags=2)  Line 1402 + 0x13 bytes	C
 	js3250.dll!js_InternalInvoke(JSContext * cx=0x055d8388, JSObject * obj=0x04a92400, long fval=95294720, unsigned int flags=0, unsigned int argc=1, long * argv=0x06bb7a98, long * rval=0x0012e530)  Line 1458 + 0x18 bytes	C
 	js3250.dll!JS_CallFunctionValue(JSContext * cx=0x055d8388, JSObject * obj=0x04a92400, long fval=95294720, unsigned int argc=1, long * argv=0x06bb7a98, long * rval=0x0012e530)  Line 4877 + 0x1f bytes	C
 	gklayout.dll!nsJSContext::CallEventHandler(nsISupports * aTarget=0x0697a218, void * aScope=0x04a30be0, void * aHandler=0x05ae1500, nsIArray * aargv=0x06bc2310, nsIVariant * * arv=0x0012e6fc)  Line 1840 + 0x24 bytes	C++
 	gklayout.dll!nsJSEventListener::HandleEvent(nsIDOMEvent * aEvent=0x06b88118)  Line 224 + 0x67 bytes	C++
 	gklayout.dll!nsXBLPrototypeHandler::ExecuteHandler(nsPIDOMEventTarget * aTarget=0x0697a218, nsIDOMEvent * aEvent=0x06b88118)  Line 506	C++
 	gklayout.dll!nsXBLEventHandler::HandleEvent(nsIDOMEvent * aEvent=0x06b88118)  Line 88	C++
 	gklayout.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x069fd508, nsIDOMEventListener * aListener=0x069fd4c8, nsIDOMEvent * aDOMEvent=0x06b88118, nsISupports * aCurrentTarget=0x0697a218, unsigned int aPhaseFlags=6)  Line 1097 + 0x12 bytes	C++
 	gklayout.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x04f50c68, nsEvent * aEvent=0x0012f2ec, nsIDOMEvent * * aDOMEvent=0x0012eeb8, nsISupports * aCurrentTarget=0x0697a218, unsigned int aFlags=6, nsEventStatus * aEventStatus=0x0012eebc)  Line 1217	C++
 	gklayout.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6)  Line 207	C++
 	gklayout.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6, nsDispatchingCallback * aCallback=0x0012ef6c)  Line 266	C++
 	gklayout.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x0697a218, nsPresContext * aPresContext=0x04f50c68, nsEvent * aEvent=0x0012f2ec, nsIDOMEvent * aDOMEvent=0x00000000, nsEventStatus * aEventStatus=0x0012f090, nsDispatchingCallback * aCallback=0x0012ef6c)  Line 479 + 0x12 bytes	C++
 	gklayout.dll!PresShell::HandleEventInternal(nsEvent * aEvent=0x0012f2ec, nsIView * aView=0x055bca58, nsEventStatus * aStatus=0x0012f090)  Line 5772 + 0x29 bytes	C++
 	gklayout.dll!PresShell::HandlePositionedEvent(nsIView * aView=0x055bca58, nsIFrame * aTargetFrame=0x06a58ed8, nsGUIEvent * aEvent=0x0012f2ec, nsEventStatus * aEventStatus=0x0012f090)  Line 5661 + 0x14 bytes	C++
 	gklayout.dll!PresShell::HandleEvent(nsIView * aView=0x055bca58, nsGUIEvent * aEvent=0x0012f2ec, nsEventStatus * aEventStatus=0x0012f090)  Line 5504 + 0x1e bytes	C++
 	gklayout.dll!nsViewManager::HandleEvent(nsView * aView=0x055bca58, nsPoint aPoint={...}, nsGUIEvent * aEvent=0x0012f2ec, int aCaptured=0)  Line 1295	C++
 	gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent * aEvent=0x0012f2ec, nsEventStatus * aStatus=0x0012f1d0)  Line 1248 + 0x22 bytes	C++
 	gklayout.dll!HandleEvent(nsGUIEvent * aEvent=0x0012f2ec)  Line 171	C++
 	gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent * event=0x0012f2ec, nsEventStatus & aStatus=nsEventStatus_eIgnore)  Line 1075 + 0xc bytes	C++
 	gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent * event=0x0012f2ec)  Line 1096	C++
 	gkwidget.dll!nsWindow::DispatchMouseEvent(unsigned int aEventType=302, unsigned int wParam=1, long lParam=4260020, int aIsContextMenuKey=0, short aButton=0)  Line 5960 + 0x1a bytes	C++
 	gkwidget.dll!ChildWindow::DispatchMouseEvent(unsigned int aEventType=302, unsigned int wParam=1, long lParam=4260020, int aIsContextMenuKey=0, short aButton=0)  Line 6142	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int msg=513, unsigned int wParam=1, long lParam=4260020, long * aRetValue=0x0012f79c)  Line 4414 + 0x24 bytes	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ * hWnd=0x00540d88, unsigned int msg=513, unsigned int wParam=1, long lParam=4260020)  Line 1288 + 0x1d bytes	C++
 	user32.dll!7e418734() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]	
 	user32.dll!7e418816() 	
 	js3250.dll!js_NewScript(JSContext * cx=0x0012f8a0, unsigned long length=2118386775, unsigned long nsrcnotes=2118223920, unsigned long natoms=0, unsigned long nobjects=1243312, unsigned long nregexps=2118224333, unsigned long ntrynotes=0)  Line 1376 + 0xf bytes	C
 	js3250.dll!js_NewScript(JSContext * cx=0x00960090, unsigned long length=20, unsigned long nsrcnotes=1, unsigned long natoms=0, unsigned long nobjects=0, unsigned long nregexps=16, unsigned long ntrynotes=0)  Line 1376 + 0xf bytes	C
 	0012f8d0()	
 	js3250.dll!js_NewScript(JSContext * cx=0x00000000, unsigned long length=38118800, unsigned long nsrcnotes=5508488, unsigned long natoms=513, unsigned long nobjects=1, unsigned long nregexps=4260020, unsigned long ntrynotes=9830564)  Line 1376 + 0xf bytes	C
 	user32.dll!7e4189cd() 	
 	user32.dll!7e419402() 	
 	user32.dll!7e418a10() 	
 	gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int mayWait=1)  Line 149	C++
 	gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int mayWait=1)  Line 137 + 0x11 bytes	C++
 	gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal * thr=0x00c01fb0, int mayWait=1, unsigned int recursionDepth=0)  Line 247 + 0xf bytes	C++
 	xpcom_core.dll!nsThread::ProcessNextEvent(int mayWait=1, int * result=0x0012f990)  Line 480	C++
 	xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x00c01fb0, int mayWait=1)  Line 227 + 0x16 bytes	C++
 	gkwidget.dll!nsBaseAppShell::Run()  Line 154 + 0xc bytes	C++
 	tkitcmps.dll!nsAppStartup::Run()  Line 170 + 0x1c bytes	C++
 	xul.dll!XRE_main(int argc=4, char * * argv=0x00bdd908, const nsXREAppData * aAppData=0x00bddd08)  Line 3142 + 0x25 bytes	C++
 	firefox.exe!main(int argc=4, char * * argv=0x00bdd908)  Line 153 + 0x12 bytes	C++
 	firefox.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes	C
 	firefox.exe!mainCRTStartup()  Line 403	C
 	kernel32.dll!7c816fd7()
interesting, item 156 does have a parent of 156, but that item in moz_bookmarks is the "Live Bookmark feed failed to load." item!

next steps:

1) figure out why we create that special item with parent == self
2) fix FilterResultSet() so that we bail out if parent == self


Status: NEW → ASSIGNED
Flags: blocking-firefox3?
Target Milestone: --- → Firefox 3 M9
> 1) figure out why we create that special item with parent == self

it looks like we are doing the right thing:

http://lxr.mozilla.org/seamonkey/source/toolkit/components/places/src/nsLivemarkService.js#560

> 2) fix FilterResultSet() so that we bail out if parent == self

simple fix in hand, I'll attach for review.
Attached patch patch (obsolete) — Splinter Review
Attachment #285509 - Flags: review?(dietrich)
Flags: in-litmus?
(In reply to comment #2)
> > 1) figure out why we create that special item with parent == self
> 
> it looks like we are doing the right thing:
> 
> http://lxr.mozilla.org/seamonkey/source/toolkit/components/places/src/nsLivemarkService.js#560
> 


hrm, we need to know how the db got into that state.
> hrm, we need to know how the db got into that state.

I agree, but looking through his places.sqlite file hasn't reveal anything.

I was thinking that maybe we were calling insertBookmark() with a folder id that was deleted, but insert bookmark blindly sets the parent based on what you pass it.

I think that since lastAncestor == ancestor should not happen if GetFolderIdForItem() succeeds, I should re-work this patch to assert.
Attached patch updated patchSplinter Review
Attachment #285509 - Attachment is obsolete: true
Attachment #285520 - Flags: review?
Attachment #285509 - Flags: review?(dietrich)
Comment on attachment 285520 [details] [diff] [review]
updated patch

thanks, better to fail early, r=me
Attachment #285520 - Flags: review? → review+
I'm looked at where we "UPDATE moz_bookmarks..." to change the parent.

I see two places, nsNavBookmarks::MoveItem() and some temporary migration code

1)

  // Temporary migration code for bug 396300
  nsCOMPtr<mozIStorageStatement> moveUnfiledBookmarks;
  rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("UPDATE moz_bookmarks SET parent = ?1 WHERE type = ?2 AND parent=?3"),
                               getter_AddRefs(moveUnfiledBookmarks));

the migration code seems safe as we use the unfiled root as the parent.

2)

nsNavBookmarks::MoveItem() is also safe, as we already check and fail if you try to make an item its own parent.
Comment on attachment 285520 [details] [diff] [review]
updated patch

seeking approval
Attachment #285520 - Flags: approval1.9?
Attachment #285520 - Flags: approvalM9+
Attachment #285520 - Flags: approval1.9?
Attachment #285520 - Flags: approval1.9+
fixed

Checking in nsNavBookmarks.cpp;
/cvsroot/mozilla/toolkit/components/places/src/nsNavBookmarks.cpp,v  <--  nsNavB
ookmarks.cpp
new revision: 1.124; previous revision: 1.123
done
Status: ASSIGNED → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Flags: blocking-firefox3? → blocking-firefox3+
crap, I just hit this again with a relatively recent profile.

when debugging, the code I added didn't help because the aItemId != *aFolderId (6 vs 7)

 nsNavBookmarks::GetFolderIdForItem (this=0x37c5aa90, aItemId=6, aFolderId=0xbfffce90) at /Users/sspitzer/Desktop/trunk/mozilla/toolkit/components/places/src/nsNavBookmarks.cpp:2188
2188      NS_ENSURE_TRUE(aItemId != *aFolderId, NS_ERROR_UNEXPECTED);

I've attached my places.sqlite

if you look at my places.sqlite, something bad has happend to my personal toolbar (it appears to be missing?)
re-opening, something very bad is going on.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Target Milestone: Firefox 3 M9 → Firefox 3 M10
Priority: -- → P2
moveItem should also check that parent is not set to the id of one of the children or it will enter a loop (in your places.sqlite 6 has parent 7 and 7 has parent 6)... 
But this is a recursive and slow check since a folder can have multiple levels of subfolders. 
The check, could be done easier using a Nested Set Preordered Tree (for example see http://www.mrnaz.com/static/articles/trees_in_sql_tutorial/) for bookmarks. Since they are hierarchical, that had ensured slower inserts but faster selects, direct access to all childrens of a folder without recursion, easier "count number of childs", easier use stats, but that had to be done early in development stage. I suggest moving bookmarks table to a nested preordered tree table for the next major release.

about disappearing of personal toolbar, could that be connected to Bug 403263? since it has been replaced by a separator (type=3), even if i don't understand how can the separator take the personal toolbar folder id (5).
sorry, i have now seen that the while loop in moveItems makes the check from aNewFolder to ensure that it does not create a loop between bookmarks. 
Target Milestone: Firefox 3 M10 → Firefox 3 M11
dmills tells me that a friend of blizzard's just hit this.

this bug is bad news, we really need to figure out how we get into this state.
Status: REOPENED → ASSIGNED
I'm trying to get her places.sqlite file.  I won't post it here but I'm sure that you guys can have a copy to look at it.

I think that her problem started as soon as she tried beta1 and the symptoms seem a little different.  So we'll look into it.
un-assigning seth's places/autocomplete bugs.
Assignee: moco → nobody
Status: ASSIGNED → NEW
Target Milestone: Firefox 3 beta3 → Firefox 3 beta4
Target Milestone: Firefox 3 beta4 → Firefox 3
-> to dietrich to fix/find an owner
Assignee: nobody → dietrich
Whiteboard: [swag .5d]
No updates since December 07.

Chris, is your friend able to reproduce this still?
Status: NEW → ASSIGNED
(In reply to comment #12)
> 
> if you look at my places.sqlite, something bad has happend to my personal
> toolbar (it appears to be missing?)
> 

no, it's there, but it's suffering from the "some roots have missing titles" problem.
Unsure if she still sees this problem.  She uses safari now. :(
(In reply to comment #22)
> Unsure if she still sees this problem.  She uses safari now. :(
> 

chin up, you're on the evangelism team! ;)

well, i've not heard a peep on the build forums about this, and no dupes filed. so going to mark WFM.

future commenters: if you can reproduce this, please file a new bug. don't re-open this bug, as it's already been patched and checked in (and the code referenced here has been rewritten several times over since this bug was first filed).
Status: ASSIGNED → RESOLVED
Closed: 17 years ago16 years ago
Resolution: --- → WORKSFORME
Bug 451915 - move Firefox/Places bugs to Firefox/Bookmarks and History. Remove all bugspam from this move by filtering for the string "places-to-b-and-h".

In Thunderbird 3.0b, you do that as follows:
Tools | Message Filters
Make sure the correct account is selected. Click "New"
Conditions: Body   contains   places-to-b-and-h
Change the action to "Delete Message".
Select "Manually Run" from the dropdown at the top.
Click OK.

Select the filter in the list, make sure "Inbox" is selected at the bottom, and click "Run Now". This should delete all the bugspam. You can then delete the filter.

Gerv
Component: Places → Bookmarks & History
QA Contact: places → bookmarks
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: