Closed Bug 30828 Opened 25 years ago Closed 16 years ago

widget leakage in mailreader and new message

Categories

(MailNews Core :: Backend, defect, P3)

x86
Linux
defect

Tracking

(Not tracked)

RESOLVED INVALID
Future

People

(Reporter: con.hennessy, Unassigned)

References

Details

(Keywords: memory-leak)

From todays CVS: When you start to edit mail and then close the window ( I did not send mail ), you can see that the number of widgets which still exists seems to be 2 more than the previous time. i.e. if you continuously open a new mail message and close the window the count for "widgets exist" increments by 2. Something similiar can be seen when opening and closing the mailreader. (Possibly this is affected by the fact that the IMAP login window comes up twice - I cancelled both ? )
-> MailNews team
Assignee: cbegle → phil
Component: Browser-General → Back End
Product: Browser → MailNews
QA Contact: asadotzler → lchiang
alecf tells me this is an issue with the underlying widget library, not under mail/news control. Reassigning to pavlov, cc blizzard.
Assignee: phil → pavlov
Does alecf have sekret knowledge about how this leak is happening? Are we leaking webshells here? that would cause a leak of widgets.
we might leak webshells, but mail really doesn't play with them THAT much.. and we certainly don't go down to the widget level. con.hennessy, are you talking about the mail compose window or the mail reader? (so I know who else to add to the CC)
I was talking about BOTH the mail reader and the mail compose window. I saw a message something similar to: widget::~widget () : X widgets not destroyed where X was more usually 1 or 2 more every time I closed the appropriate window than the time before. Sorry I cannot give you the exact message but having updated from the CVS repository yesterday I do not see the messages about the number of widgets anymore :-(
From todays CVS update I still see the same problem, so here is the exact trace I see when I start the compone window ( sorry it's a bit long but look at the end for more comments ): ComposeMessage from XUL: [nsIMsgIdentity: id2] WEBSHELL+ = 8 WEBSHELL+ = 9 ComposeLoad from XUL Compose: ComposeStartup [preselectid=id2] [format=0] [type=0] [nsIMsgIdentity: id2] Created nsEditorShell Created editorShell frame: Text(-1) (0x8d1a5bc) style: 0x8d1b6a8 :-moz-text {} Wrong parent style context: style: 0x8d19f60 { http://www.w3.org/TR/REC-html40|input weight: 1 { font-family: "-moz-fixed" color: "black" background-color: "white" vertical-align: 17[0x11]enum text-align: 1[0x1]enum border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga border-style: 8[0x8]enum 8[0x8]enum 8[0x8]enum 8[0x8]enum box-sizing: 2[0x2]enum behavior: url("resource:/chrome/platformHTMLBindings.xml#inputFields") } http://www.w3.org/TR/REC-html40|input[|type=button] weight: 257 { font-family: "sans-serif" font-size: 2[0x2]enum color: "black" background-color: (0xce 0xcf 0xce 0xff)rbga padding-top: 1px padding-right: 1px padding-bottom: 1px padding-left: 1px border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga border-style: 9[0x9]enum 9[0x9]enum 9[0x9]enum 9[0x9]enum box-sizing: 2[0x2]enum behavior: none } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-image: url("resource:///res/arrow.gif") background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum white-space: 2[0x2]enum border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga border-style: 9[0x9]enum 9[0x9]enum 9[0x9]enum 9[0x9]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 0px -moz-border-radius-bottomRight: 0px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } type = 5[0x5]enum http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } } should be using: style: 0x8d1b1b0 :button-content { *|:button-content weight: 0 { text-align: 3[0x3]enum display: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } } frame: Text(-1) (0x8d1ab7c) style: 0x8d1b6a8 :-moz-text {} Wrong parent style context: style: 0x8d19f60 { http://www.w3.org/TR/REC-html40|input weight: 1 { font-family: "-moz-fixed" color: "black" background-color: "white" vertical-align: 17[0x11]enum text-align: 1[0x1]enum border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga border-style: 8[0x8]enum 8[0x8]enum 8[0x8]enum 8[0x8]enum box-sizing: 2[0x2]enum behavior: url("resource:/chrome/platformHTMLBindings.xml#inputFields") } http://www.w3.org/TR/REC-html40|input[|type=button] weight: 257 { font-family: "sans-serif" font-size: 2[0x2]enum color: "black" background-color: (0xce 0xcf 0xce 0xff)rbga padding-top: 1px padding-right: 1px padding-bottom: 1px padding-left: 1px border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga (0x9c 0x9a 0x9c 0xff)rbga border-style: 9[0x9]enum 9[0x9]enum 9[0x9]enum 9[0x9]enum box-sizing: 2[0x2]enum behavior: none } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-image: url("resource:///res/arrow.gif") background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum white-space: 2[0x2]enum border-top-width: 2px border-right-width: 2px border-bottom-width: 2px border-left-width: 2px border-color: (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga (0xcc 0xcc 0xcc 0xff)rbga border-style: 9[0x9]enum 9[0x9]enum 9[0x9]enum 9[0x9]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 0px -moz-border-radius-bottomRight: 0px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } type = 5[0x5]enum http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input weight: 1 { color: "black" background-color: "white" text-align: 1[0x1]enum user-focus: normal } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } http://www.w3.org/TR/REC-html40|input[|type=button] > http://www.w3.org/TR/REC-html40|select weight: 258 { background-color: (0xcc 0xcc 0xcc 0xff)rbga background-repeat: 0[0x0]enum background-x-position: 50[0x32]enum background-y-position: 50[0x32]enum border-top-width: 1px border-right-width: 1px border-bottom-width: 1px border-left-width: 1px border-color: "white" (0x66 0x66 0x66 0xff)rbga (0x66 0x66 0x66 0xff)rbga "white" border-style: 5[0x5]enum 5[0x5]enum 5[0x5]enum 5[0x5]enum -moz-border-radius-topLeft: 0px -moz-border-radius-topRight: 3px -moz-border-radius-bottomRight: 3px -moz-border-radius-bottomLeft: 0px width: 12px height: 12px } } should be using: style: 0x8d1b1b0 :button-content { *|:button-content weight: 0 { text-align: 3[0x3]enum display: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } *|:button-content > http://www.w3.org/TR/REC-html40|input > http://www.w3.org/TR/REC-html40|select weight: 2 { text-align: 1[0x1]enum } } nsWidget::~nsWidget() of toplevel: 58 widgets still exist. nsWidget::~nsWidget() of toplevel: 53 widgets still exist. editor initialized in PLAIN TEXT mode Attaching to WebShellWindow[_blank] ###!!! ASSERTION: bad args: '(inChild && outParent && outOffset)', file nsMsgCompose.cpp, line 208 ###!!! Break: at file nsMsgCompose.cpp, line 208 set focus on the recipient WEBSHELL+ = 10 ComposeUnload from XUL nsWidget::~nsWidget() of toplevel: 57 widgets still exist. nsWidget::~nsWidget() of toplevel: 52 widgets still exist. nsWidget::~nsWidget() of toplevel: 47 widgets still exist. WEBSHELL- = 9 WEBSHELL- = 8 WEBSHELL- = 7 nsWidget::~nsWidget() of toplevel: 38 widgets still exist. Now if I run it again I get what looks like the same output as above except with the last lines: nsWidget::~nsWidget() of toplevel: 46 widgets still exist. WEBSHELL- = 8 WEBSHELL- = 7 nsWidget::~nsWidget() of toplevel: 41 widgets still exist. and running again I get : nsWidget::~nsWidget() of toplevel: 58 widgets still exist. nsWidget::~nsWidget() of toplevel: 53 widgets still exist. nsWidget::~nsWidget() of toplevel: 48 widgets still exist. WEBSHELL- = 8 WEBSHELL- = 7
I'm guessing this is a leak somewhere in the mail/news code. I doubt it's in the end widget code since those are the victims of the leak - not the leak itself. :)
ok, mscott is all over webshell leaks in the mail reader.
I'm not seeing any webshell leaks bringing up and closing the compose window. This webshell leak was fixed last week by waterson. If I startup, bring up a compose window and then close the compose window. my webshell count is the same as it was before I brought up the compose window. I didn't read all the comments in this bug as they were quite long...is this not what you are seeing?
Sorry but I was not talking about the WEBSHELL line I was talking about the line which looks like : nsWidget::~nsWidget() of toplevel: 48 widgets still exist. If you look at my previous message you will see that this number seems to grow as I open and close a mail-reader or mail-compose window. i.e. you can see that after I first close the window we see that nsWidget::~nsWidget() of toplevel: 38 widgets still exist. after the second run we see: nsWidget::~nsWidget() of toplevel: 41 widgets still exist. and after the third we see : nsWidget::~nsWidget() of toplevel: 48 widgets still exist. I hope that this is clearer.
That's fine. But something is leaking those widgets and it's probably not the widget code itself.
I found a dom node like in the compose backend tonight that I just checked in a fix for. This *could* account for the leak reported in this bug report. But I didn't verify that. I will try to investigate more into this. I suspect this bug better belongs to me instead of pav.....
Assignee: pavlov → mscott
Target Milestone: M15
as do i... :-)
Status: UNCONFIRMED → NEW
Ever confirmed: true
My dom node leak fix definetly made things *MUCH* better. But there is still a single widget leak every time you bring up a compose window. I now see numbers like the following: First time I bring up and exit compose window: nsWidget::~nsWidget() of toplevel: 10 widgets still exist. Second time: nsWidget::~nsWidget() of toplevel: 11 widgets still exist. Third Time: nsWidget::~nsWidget() of toplevel: 12 widgets still exist.
triaging since M15 is tonight. Not an M15 stoppper.
Target Milestone: M15 → M17
moving to future milestone.
Target Milestone: M17 → Future
Is this leak still occuring?
Blocks: 92580
No longer blocks: 92580
QA Contact: lchiang → stephend
plussing, but is it still valid?
Keywords: nsbeta1+
Blocks: 122274
Keywords: nsbeta1+nsbeta1-
Product: MailNews → Core
Assignee: mscott → nobody
QA Contact: stephend → backend
Product: Core → MailNews Core
nsWidget::~nsWidget() is now gone. I don't see any way we can reproduce this actual bug and results easily. I'm therefore going to close this bug, as I'm sure we'll pick it up in leak/bloat as we develop more tests and investigate what our leaks are.
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.