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.