Closed
Bug 242982
Opened 21 years ago
Closed 21 years ago
100% cpu in any view, no events (workaround 1.7/1.8 getElementsByAttribute incompatibility)
Categories
(Calendar :: Sunbird Only, defect)
Calendar
Sunbird Only
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: gekacheka, Assigned: mostafah)
References
Details
Attachments
(7 files, 3 obsolete files)
1.39 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
2.30 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
2.38 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
2.30 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
1.98 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
1.83 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
1.00 KB,
patch
|
mostafah
:
first-review+
|
Details | Diff | Splinter Review |
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040421
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040421
Switching to any of the views hangs with 100% cpu when running calendar code
from cvs on Moz1.7. No events are displayed in grids.
Reproducible: Always
Steps to Reproduce:
1.
2.
3.
Problem is due to changes made for Bug 240186, which changes the behavior of
document.getElementsByAttribute. The result in 1.8 is a 'live' list, so adding
or removing elements of the list while traversing the list changes the index of
all elements after it. The changes made to accommodate the new 'live' behavior
are not compatible with the old behavior.
In particular, many places where the code did something like
var selectedBoxes = getElementsByAttribute("selected","true");
for (var i = 0; i < selectedBoxes.length; i++)
selectedBoxes[i].parentNode.removeChild(selectedBoxes[i]);
were changed to something like
var selectedBoxes = getElementsByAttribute("selected","true");
while(selectedBoxes.item(0)) {
var box = selectedBoxes.item(0);
box.parentNode.removeChild(box);
}
Note removing the node from its parent also removes it from the 'live' list.
Similarly, code that did something like
var markedBoxes = document.getElementByAttribute("selected","true");
for (var i = 0; i < markedBoxes.length; i++)
markesBoxes[i].removeAttribute("selected");
was changed to
var markedBoxes = document.getElementByAttribute("selected","true");
while(markedBoxes.item(0)) {
markedBoxes.item(0).removeAttribute("selected"):
}
Note changing the attribute also removes it from the 'live' list.
But the new 'live' behavior of the lists returned by getElementsByAttribute is
incompatible with the old 'dead' behavior.
A workaround that should work with both the old 1.7 behavior and the new 1.8
behavior is to copy the list into a temporary array first, and then delete the
elements of the array.
var liveList = document.getElementByAttribute("selected","true");
var deadArray = new Array(liveList.length);
for (var i = 0; i < deadArray.length; i++)
deadArray[i] = liveList.item(i);
liveList = null;
for (var i = 0; i < deadArray.length; i++)
deadArray[i].removeAttribute("selected"):
Adds CalendarView utility methods called by all derived views.
removeElementsByAttribute
removeAttributeFromElements
getArrayOfElementsByAttribute (called by above 2)
Patch dayView to call calendarView methods.
removeElementsByAttribute
removeAttributeFromElements
Patch weekView.js to call calendarView methods
removeElementsByAttribute
removeAttributeFromElements
Patch week view to call calendar view methods
removeElementsByAttribute
removeAttributeFromElements
Patch monthView.js to call calendarView methods
removeElementsByAttribute
removeAttributeFromElements
Attachment #147955 -
Flags: first-review+
Attachment #147956 -
Flags: first-review+
Attachment #147955 -
Flags: first-review+ → first-review?(mostafah)
Attachment #147956 -
Flags: first-review+ → first-review?(mostafah)
Attachment #147957 -
Flags: first-review?(mostafah)
Attachment #147959 -
Flags: first-review?(mostafah)
Attachment #147960 -
Flags: first-review?(mostafah)
Attachment #147961 -
Flags: first-review?(mostafah)
Attachment #147962 -
Flags: first-review?(mostafah)
Comment 8•21 years ago
|
||
Or you could walk the list in reverse order and delete elements -- that would
work with both the new and old behavior, no?
That said, that's much slower than the code I wrote (which is why I wrote the
code as I did); I was not aware that current calendar XPIs had the requirement
to be installable on old builds....
Updated to remove in reverse order, avoiding copy.
Attachment #147955 -
Attachment is obsolete: true
Reporter | ||
Comment 10•21 years ago
|
||
Removes in reverse order, avoiding copy.
Attachment #147961 -
Attachment is obsolete: true
Reporter | ||
Comment 11•21 years ago
|
||
Remove in reverse order, avoid copy.
Attachment #147962 -
Attachment is obsolete: true
Attachment #147982 -
Flags: first-review?(mostafah)
Attachment #147983 -
Attachment description: dragDrop.js patch (remove elements in reverse order) → dragDrop.js patch (remove attributes in reverse order)
Attachment #147983 -
Flags: first-review?(mostafah)
Attachment #147984 -
Flags: first-review?(mostafah)
Attachment #147955 -
Flags: first-review?(mostafah)
Attachment #147961 -
Flags: first-review?(mostafah)
Attachment #147962 -
Flags: first-review?(mostafah)
Assignee | ||
Updated•21 years ago
|
Attachment #147982 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147956 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147957 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147959 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147960 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147983 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Updated•21 years ago
|
Attachment #147984 -
Flags: first-review?(mostafah) → first-review+
Assignee | ||
Comment 12•21 years ago
|
||
All reviewed patches checked into CVS.
Problem fixed and the code looks nicer.
Thanks a lot.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Comment 13•18 years ago
|
||
The bugspam monkeys have been set free and are feeding on Calendar :: Sunbird Only. Be afraid for your sanity!
QA Contact: gurganbl → sunbird
You need to log in
before you can comment on or make changes to this bug.
Description
•