Closed Bug 80868 Opened 23 years ago Closed 6 years ago

Race conditions when rapidly switching preference panes

Categories

(Core :: Preferences: Backend, defect, P4)

x86
All
defect

Tracking

()

RESOLVED INCOMPLETE
mozilla1.1alpha

People

(Reporter: jbetak, Assigned: samir_bugzilla)

References

Details

Attachments

(4 files)

this is a follow-up bug to bug 57720, which was marked mostfreq. This problem 
affects preferences only. Although rapid UI interaction might cause a large JS 
file from being fully loaded in any part of the XUL UI, only the preferences 
seem to cache transient widget state information (via Ben's wsm - widget state 
manager).

For now, I'll simply copy some of the comments from there:

---

It appears that the culprit is the asynchronous load of external JS files from 
individual pref panes. When "dancing around" the preference window tree, the 
asynchronous load can fail due to the timing (racing?) conditions and the 
initialization JS code for the pref pane doesn't get executed. After a failed 
JS load, we start hitting the asserts.

---

when I increase the size of pref-search.js (>10 kB ) and place a delay in 
its initialization function, this bug can also be reproduced with the "Internet 
Search" preference panel. It seems to be an underlying issue with the 
preference code, which cannot handle multiple rapid requests without 
compromising data integrity.

---
I don't think this is a backend issue, I think it's a frontend issue.
Perusing through the console output, I can't immediately find an indication of a
race condition.. can you post a relevant exerpt?
alecf,

thanks for looking into this. I'll try to spend some more time prepping valid 
data as promised. For expediency's sake, here are my current - and for the most 
part probably ignorant - comments:

both console outputs demonstrate that a JS file could not be loaded, which I 
found suspicious. In my experience this only happens if interacting with the 
pref tree very rapidly. Debug dumps in nsPrefWindow and nsWidgetStateManager 
proved to be helpful in both generating an event log and artificially slowing 
down the responsiveness.

Another thought - every prefWindow "switchpage" request should be followed with 
an "onpageload". Below I copied all occurrences from the last attachment - 
the "switchpage" count is 22, "onpageload" is 16...

-------------

*** Switch page request:chrome://communicator/content/pref/pref-languages.xul...
got a request
WARNING: not calling OnDataAvailable, file d:\build\mozilla\netwerk\base\src\nsA
syncStreamListener.cpp, line 403
Failed to load file:///D:/build/mozilla/dist/WIN32_D.OBJ/bin/chrome/toolkit/cont
ent/global/strres.js
WARNING: waaah!, file D:\build\mozilla\rdf\content\src\nsXULPrototypeDocument.cp
p, line 523

*** Switch page request:chrome://communicator/content/pref/pref-languages.xul...
got a request
WARNING: not calling OnDataAvailable, file d:\build\mozilla\netwerk\base\src\nsA
syncStreamListener.cpp, line 403
Failed to load file:///D:/build/mozilla/dist/WIN32_D.OBJ/bin/chrome/toolkit/cont
ent/global/strres.js


*** onpageload: this.wsm.dataManager.pageData[chrome://communicator/content/book
*** onpageload: this.wsm.dataManager.pageData[chrome://communicator/content/book
*** onpageload: this.wsm.dataManager.pageData[chrome://communicator/content/pref
*** onpageload: this.wsm.dataManager.pageData[chrome://communicator/content/pref
*** onpageload:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** onpageload:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** onpageload:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** onpageload:chrome://communicator/content/pref/pref-history.xul
*** onpageload:chrome://communicator/content/pref/pref-languages.xul
*** onpageload:chrome://communicator/content/pref/pref-navigator.xul
*** onpageload:chrome://communicator/content/pref/pref-navigator.xul
*** onpageload:chrome://communicator/content/pref/pref-search.xul
*** onpageload:chrome://communicator/content/pref/pref-smart_browsing.xul
*** onpageload:chrome://communicator/content/pref/pref-smart_browsing.xul
*** onpageload:chrome://communicator/content/pref/pref-smart_browsing.xul
*** onpageload:chrome://editor/content/pref-editing.xul



*** switchPage:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** switchPage:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** switchPage:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** switchPage:chrome://communicator/content/bookmarks/pref-bookmarks.xul
*** switchPage:chrome://communicator/content/pref/pref-applications.xul
*** switchPage:chrome://communicator/content/pref/pref-applications.xul
*** switchPage:chrome://communicator/content/pref/pref-history.xul
*** switchPage:chrome://communicator/content/pref/pref-history.xul
*** switchPage:chrome://communicator/content/pref/pref-history.xul
*** switchPage:chrome://communicator/content/pref/pref-languages.xul
*** switchPage:chrome://communicator/content/pref/pref-languages.xul
*** switchPage:chrome://communicator/content/pref/pref-search.xul
*** switchPage:chrome://communicator/content/pref/pref-search.xul
*** switchPage:chrome://communicator/content/pref/pref-search.xul
*** switchPage:chrome://communicator/content/pref/pref-search.xul
*** switchPage:chrome://communicator/content/pref/pref-smart_browsing.xul
*** switchPage:chrome://communicator/content/pref/pref-smart_browsing.xul
*** switchPage:chrome://communicator/content/pref/pref-smart_browsing.xul
*** switchPage:chrome://communicator/content/pref/pref-smart_browsing.xul
*** switchPage:chrome://editor/content/pref-composer.xul
*** switchPage:chrome://editor/content/pref-editing.xul
*** switchPage:chrome://editor/content/pref-editing.xul

oops, I copied the same section twice, here is the missing part:

*** switchPage:chrome://editor/content/pref-composer.xul
/content/pref-editing.xul
*** switchPage:chrome://communicator/content/pref/pref-search.xul
Failed to load file:///C:/build/mozilla/dist/WIN32_D.OBJ/bin/chrome/comm/content
/editor/pref-composer.js
/content/pref-composer.xul
WARNING: waaah!, file c:\build\mozilla\content\xul\document\src\nsXULPrototypeDo
cument.cpp, line 523
JavaScript error:

Here is another snippet, which shows that pref-search.js was not loaded 
although a the usual "Failed to load file..." warning didn't come up this time:

*** hPrefWindow.onpageload: chrome://communicator/content/pref/pref-search.xul
JavaScript error:
 line 0: checkEngine is not defined


This sounds like it's more up Samir's alley.
Assignee: dveditz → sgehani
Status: NEW → ASSIGNED
Priority: -- → P4
Target Milestone: --- → mozilla0.9.7
Moving to mozilla0.9.8.
Target Milestone: mozilla0.9.7 → mozilla0.9.8
Moving to milestone after mozilla0.9.9 (mozilla1.0 for now).
Keywords: nsbeta1+
Target Milestone: mozilla0.9.8 → mozilla1.0
Prefs triage team: nsbeta1-
Keywords: nsbeta1+nsbeta1-
Mass-moving all Navigator team 1.0 nsbeta1- bugs to 1.1
Target Milestone: mozilla1.0 → mozilla1.1
QA Contact: bugzilla → preferences-backend
This bug hasn't hasn't been touched meaningfully in 17 years. I don't even understand what it's about -- I don't know what "preference panes" and the "preference window tree", and pref-search.js doesn't seem to exist any more. I'm going to assume that whatever relevance it once had is long gone.
Status: ASSIGNED → RESOLVED
Closed: 6 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: