Closed Bug 8608 Opened 26 years ago Closed 26 years ago

crash when double clicking on items in pref panels

Categories

(Core :: XUL, defect, P3)

x86
Windows 95
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: chofmann, Assigned: waterson)

Details

(Whiteboard: investigating)

These crashes poking around in pref panels were pretty easy to hit
on M7 candidates from Saturday.

Do we know want is going on there?


 Trigger Type:  Program Crash
 Trigger Reason:  Access violation

 Call Stack:    (Signature = RDFElementImpl::AddScriptEventListener 46fa5bec)
  RDFElementImpl::AddScriptEventListener

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp, line 2000]
  RDFElementImpl::SetAttribute

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp, line 1950]
  RDFXULBuilderImpl::AddAttribute

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFXULBuilder.cpp, line 2465]
  RDFXULBuilderImpl::CreateXULElement

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFXULBuilder.cpp, line 2216]
  RDFXULBuilderImpl::CreateOrReuseElement

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFXULBuilder.cpp, line 1872]
  RDFXULBuilderImpl::CreateRootContent

[d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFXULBuilder.cpp, line 542]
  XULDocumentImpl::SetRootResource

[d:\builds\seamonkey\mozilla\rdf\content\src\nsXULDocument.cpp, line 2361]
  XULContentSinkImpl::OpenTag

[d:\builds\seamonkey\mozilla\rdf\datasource\src\nsXULContentSink.cpp, line 1373]
  XULContentSinkImpl::OpenContainer

[d:\builds\seamonkey\mozilla\rdf\datasource\src\nsXULContentSink.cpp, line 592]
  CWellFormedDTD::HandleToken

[d:\builds\seamonkey\mozilla\htmlparser\src\nsWellFormedDTD.cpp, line 468]
  CWellFormedDTD::BuildModel

[d:\builds\seamonkey\mozilla\htmlparser\src\nsWellFormedDTD.cpp, line 254]
  nsParser::BuildModel

[d:\builds\seamonkey\mozilla\htmlparser\src\nsParser.cpp, line 903]
  nsParser::ResumeParse

[d:\builds\seamonkey\mozilla\htmlparser\src\nsParser.cpp, line 852]
  nsParser::EnableParser

[d:\builds\seamonkey\mozilla\htmlparser\src\nsParser.cpp, line 587]
  CSSLoaderImpl::Cleanup

[d:\builds\seamonkey\mozilla\layout\html\style\src\nsCSSLoader.cpp, line 613]
  CSSLoaderImpl::SheetComplete

[d:\builds\seamonkey\mozilla\layout\html\style\src\nsCSSLoader.cpp, line 683]
  CSSLoaderImpl::ParseSheet

[d:\builds\seamonkey\mozilla\layout\html\style\src\nsCSSLoader.cpp, line 718]
  CSSLoaderImpl::DidLoadStyle

[d:\builds\seamonkey\mozilla\layout\html\style\src\nsCSSLoader.cpp, line 748]
  DoneLoadingStyle

[d:\builds\seamonkey\mozilla\layout\html\style\src\nsCSSLoader.cpp, line 555]
  nsUnicharStreamLoader::OnStopBinding

[d:\builds\seamonkey\mozilla\network\module\nsNetStreamLoader.cpp, line 158]
  nsDocumentBindInfo::OnStopBinding

[d:\builds\seamonkey\mozilla\webshell\src\nsDocLoader.cpp, line 1601]
  OnStopBindingProxyEvent::HandleEvent

[d:\builds\seamonkey\mozilla\network\module\nsNetThread.cpp, line 594]
  StreamListenerProxyEvent::HandlePLEvent

[d:\builds\seamonkey\mozilla\network\module\nsNetThread.cpp, line 474]
  PL_HandleEvent
                                         [plevent.c, line 492]
  PL_ProcessPendingEvents
                                         [plevent.c, line 453]
  _md_EventReceiverProc
                                         [plevent.c, line 881]
  KERNEL32.DLL + 0x3663 (0xbff73663)

  KERNEL32.DLL + 0x22894 (0xbff92894)

  0x00768178


1984               RDFElementImpl::AddScriptEventListener(nsIAtom* aName, const
nsString& aValue, REFNSIID
aIID)
1985 hyatt    1.14 {
1986 waterson 1.16     if (! mDocument)
1987                       return NS_OK; // XXX
1988
1989                   nsresult ret = NS_OK;
1990                   nsIScriptContext* context;
1991                   nsIScriptContextOwner* owner;
1992
1993                   owner = mDocument->GetScriptContextOwner();
1994 hyatt    1.62
1995                   nsAutoString tagStr;
1996                   mTag->ToString(tagStr);
1997
1998 waterson 1.16     if (NS_OK == owner->GetScriptContext(&context)) {
1999 hyatt    1.62       if (tagStr == "window") {
2000                       nsIDOMEventReceiver *receiver;
2001                       nsIScriptGlobalObject *global =
context->GetGlobalObject();
2002
2003                       if (nsnull != global && NS_OK ==
global->QueryInterface(kIDOMEventReceiverIID,
(void**)&receiver)) {
2004                         nsIEventListenerManager *manager;
2005                         if (NS_OK ==
receiver->GetListenerManager(&manager)) {
2006                           nsIScriptObjectOwner *mObjectOwner;
2007                           if (NS_OK ==
global->QueryInterface(kIScriptObjectOwnerIID, (void**)&mObjectOwner)) {
2008                             ret = manager->AddScriptEventListener(context,
mObjectOwner, aName, aValue, aIID);
2009                             NS_RELEASE(mObjectOwner);
2010                           }
2011                           NS_RELEASE(manager);
2012                         }
2013                         NS_RELEASE(receiver);
2014                       }
2015                       NS_IF_RELEASE(global);
2016                     }
2017                     else {
2018 waterson 1.16         nsIEventListenerManager *manager;
2019                       if (NS_OK == GetListenerManager(&manager)) {
2020                           nsIScriptObjectOwner* owner;
2021                           if (NS_OK ==
QueryInterface(kIScriptObjectOwnerIID,
2022                                                       (void**) &owner)) {
2023                               ret =
manager->AddScriptEventListener(context, owner,
2024                                                                     aName,
aValue, aIID);
2025                               NS_RELEASE(owner);
2026                           }
2027                           NS_RELEASE(manager);
2028 hyatt    1.14         }
2029                       NS_RELEASE(context);
2030 hyatt    1.62       }
2031 waterson 1.16     }
2032                   NS_RELEASE(owner);
2033
2034                   return ret;
2035 hyatt    1.14 }
2036 waterson 1.1



     Subject:
           C5.0-apprunner last 7 days
 Resent-Date:
           Sun, 20 Jun 1999 07:16:20 -0700 (PDT)
 Resent-From:
           seamonkey-tb-reports@netscape.com
       Date:
           Sun, 20 Jun 1999 07:13:27 -0700
       From:
           Netscape Communications Corporation <feedbackagent@netscape.com>
         To:
           "seamonkey-tb-reports@netscape.com"
<seamonkey-tb-reports@netscape.com>



Latest C5.0 boxes from apprunner.

1 C5.0 boxes (1675 Incidents)



 Incident

                                          1–50 of 1675
 Incident
       Trigger
       Time
       (Day)
             Call Stack Signature
                                        Trigger Source File Name

  Build ID

          User Email Address

                          User Comments
 10179418
       06/19/99
       10:33AM
             RDFElementImpl::AddScriptEventListener
             46fa5bec

d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp

  1999061909

          chofmann@netscape.com

                          click around on pref window from mail
 10179417
       06/19/99
       10:25AM
             RDFElementImpl::AddScriptEventListener
             46fa5bec

d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp

  1999061909

          chofmann@netscape.com

                          open up pref window and click around.
 10179415
       06/19/99
       05:40AM
             RDFElementImpl::AddScriptEventListener
             46fa5bec

d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp

  1999061808

          chofmann@netscape.com

                          just double click on top level navigator

                          pref in pref pannel
 10179414
       06/19/99
       05:36AM
             RDFElementImpl::AddScriptEventListener
             46fa5bec

d:\builds\seamonkey\mozilla\rdf\content\src\nsRDFElement.cpp

  1999061808

          chofmann@netscape.com

                          bring up pref window, pick a few prefs, pick

                          top level navigator pref. crash.
Status: NEW → ASSIGNED
Target Milestone: M8
First off, we're not checking for a null pointer from
GetScriptContentOwner(), which is bad. But there's something even more sinister
going on here.

Since this tree control has no "ondblclk" handler set up, a double click turns
into two mouse clicks. Thanks to all of Simon's memory fixes, this triggers the
same page to be loaded *twice* in rapid succession. It seems like this is the
recipe for some kind of race condition; somebody is trying to set up a script
event listener on the document that is about to get destroyed.

Fixing this is _probably_ as simple as just checking each call to
GetScriptContextOwner() for a null return value, and bailing if we find one
(the rest of the tear-down code should take care of cleanup).

John: you might also want to add some front-end JS to your "onclick" handler
s.t. it checks to see if the page that got clicked is actually loaded before
trying to re-load it.
Wouldn't adding ondblclick="" work around it, too?
In either case, who should own this?
Assignee: trudelle → waterson
Status: ASSIGNED → NEW
waterson,  dup of the fix you put in a few days ago?
what extra work might be needed here?
Status: NEW → ASSIGNED
Whiteboard: investigating
Status: ASSIGNED → RESOLVED
Closed: 26 years ago
Resolution: --- → FIXED
This works for me now, so marking as FIXED.
Status: RESOLVED → VERIFIED
Verified fixed on Win95 apprunner build 1999070908.
BULK MOVE: Changing component from XUL to XP Toolkit/Widgets: XUL.  XUL 
component will be deleted.
Component: XUL → XP Toolkit/Widgets: XUL
Component: XP Toolkit/Widgets: XUL → XUL
QA Contact: ckritzer → xptoolkit.widgets
You need to log in before you can comment on or make changes to this bug.