Closed Bug 227680 Opened 21 years ago Closed 21 years ago

OS takes >30sec to sleep if Camino is running

Categories

(Camino Graveyard :: General, defect)

PowerPC
macOS
defect
Not set
critical

Tracking

(Not tracked)

VERIFIED FIXED
Camino0.8

People

(Reporter: mozilla, Assigned: sbwoodside)

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.6b) Gecko/20031206 Camino/0.7+
Build Identifier: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.6b) Gecko/20031206 Camino/0.7+

Panther 10.3.1 takes a long time to go to sleep if Camino is running. Quitting
Camino will make Panther sleep immediately.

Reproducible: Always

Steps to Reproduce:
1. Start Camino
2. Select sleep from apple menu
WOW I can confirm this using the 2003120512 NB. Thanks for finding this issue, I
was wondering what caused Panther to take so long to go to sleep.
WFM
10.3.1 2003120703 Blue and White/G3

Sleep takes less then 2 seconds
Actually, I have the same problem in Jaguar 10.2.8 - didn't realize that was the
issue until you brought it up.  hm.
Perhaps it has to do with the boommarks check (broken bookmarks) that is doen
every 30 seconds. I will notify David and see if he knows something.
For memory, I think it crept in around the 0.7+ builds. I can't recall it having
the impact on sleep prior to Panther being released.
Re: Derek, WFM 20031208 NB.
This seems fixed in newer builds. Marking WORKSFORM.
Status: UNCONFIRMED → RESOLVED
Closed: 21 years ago
Resolution: --- → WORKSFORME
Agree. 2003120803 build doesn't have the delay.
Status: RESOLVED → VERIFIED
I've re-encountered the bug, and will post instructions on how to reproduce
shortly. You need to browse to specific web sites before the sleep delay is
introduced. Simply starting Camino and then putting the Mac to sleep may not
exhibit the bug
Bug is still there in most recent nightly (Dec. 11)

Steps to reproduce:

1) Open Camino
2) Open a website (example http://www.heise.de)
3) This is the crucial step you've all been missing - at least judging from my
tests: Close window using Cmd-W or the red button 
4) Try going to sleep mode

Sleep problem will remain until browser is restarted.
I'll add a few more web sites where it causes this Camino bug as well later.
Status: VERIFIED → UNCONFIRMED
Resolution: WORKSFORME → ---
Sorry to say so but I can cofrim th issues mentioned in Comment #10. Thi still
doesn't seem to be fixed.
setting new.
Status: UNCONFIRMED → NEW
Ever confirmed: true
can someone make a reduced testcase?
Target Milestone: --- → Camino0.8
Reduced tescase:

1) launch Camino browse some (doesn't matter which one) wbeiste using the first
window camino made.
2) close the window (and if you wish open a new one)

Result: your mac won't go to sleep for at least another 30 seconds.
I can reproduce this using Jasper's steps with 2003121803 on Mac OS X 10.3.2 (PB
G4 667). Later I'll try to do some task profiling during the time it takes to go
to sleep.
Has someone checked, whether the mDNSResponder or Rendez-Vous is involved? When
I look at the information in the console before sleep it seems that
mDNSResponder is slowing down the sleep process, although I'm not sure...
smfr's guess (and i agree based on the timing) is that this might be related to
using IOKit to handle gecko's PLEvent handling timers. we probably screwed
something up when the OS asks if we can go to sleep. this code landed around the
same time as this started happening, IIRC.

The code is in mozilla/widget/src/mac/nsToolkitBase.cpp in the
ToolkitSleepWakeCallback()
Severity: normal → major
Status: NEW → ASSIGNED
oh, also....it should be easy to eliminate rendezvous as a culprit by setting a
pref (found in the code) and retesting.
Here are my findings:

- I did a lot of printfs in nsToolkitBase.cpp and everything seems to work fine
so I don't think its a problem with our sleep code so much as the way its handled
- every time a new window is opened, nsToolkitBase gets inited
- the only thing you need to do to cause the 30 second sleep delay is close all
windows

This is going to be long but to sum it up here is a converstion (with fluff
removed) between me and pinkerton:

josh> I think when we close the last window we unregister our stuff from
nsToolkitBase. thats why we're not sleeping. there doesn't seem to be anything
wrong with the actual code in nsToolkitBase.cpp

pinkerton> really?

pinkerton> so it only happens when all windows are closed?

josh> yeah - when there is a window open my thorough printfing is showing that
everything works

<pinkerton> cute

<josh> and every time you open a window nsToolkitBase is inited

<pinkerton> well that would explain a lot then

<josh> but once you close all windows, no sleepy time

<pinkerton> ok, sounds like it's time to make that part a singleton

<pinkerton> by the time we shut down the toolkit, should we have anything that's
calling back for the registrations?

<pinkerton> we shouldn't

<pinkerton> maybe that's part of the prolem where we eat 80% of the cpu with no
windows open

<pinkerton> something is still lingering

<josh> what do you mean "should we have anything that's calling back for the
registrations"?

<josh> the sleep system still would - I don't think it cares whether or not we
have a window open

<pinkerton> but we didn't use to have those routines. you don't NEED them to
sleep unless you're doing something with iokit

<pinkerton> so obvsiouly we're not totally cleaning ourselves up when a window
goes away, right?

<josh> what are we doing? just quartz registration?

<pinkerton> we use IOKit for processing gecko events (PLEvents)

<pinkerton> like timers

<josh>	well, either we're not cleaning ourselves up or we're going too far by
invalidating our callback method when IOKit still expects it to respond

<pinkerton> right, but given that a normal app doesn't need to respond, we must
still be giving it a reason why it thinks it needs to keep asking us
Just for the record so we don't forget.

With the 20031024 NB this bug isn't reproducable.
With the 20031030 NB this bug isn't reproducable.

This is the same time frame in which Mike temporarely changed from buidling
camino on 10.2 to 10.3 and back. (we think)

With the 20031103 NB and higher this bug is reproducable.
i tried to test this theory about all windows being closed and i put my tibook
to sleep with 1 window open and it still took 30 seconds.

josh: are you sure about that assertion?
mike: after closing the first window camino creates the issue appears.
Its quite possible, as it seems, that there are other ways to trigger the bug. The only way I could 
consistantly do it was by closing all windows. Opening more and then closing them did not trigger 
the bug for me, but it seems that both of our accounts are in line with what Jasper says about 
closing the original window.

It makes sense that only our first window would be an issue - every other new window is just "re-
registering" (i.e. not registering) with IOKit for sleep notifications. So if the original one isn't 
unregistering correctly its not cleaning up, that is where we would see the problem.
What do we do with iokit and where is that code?
The code in question is in:

widget/src/cocoa/nsToolkitBase.cpp

Large portions of it are copied verbatim, with comments, from Apple's example
code. We use it for things related to plevents. If you make changes to that file
you have to 'make' in that directory, then in 'embedding/config' and then again
in the camino dir in order to the changes to propagate up. Problem is we're not
responding to the iokit in certain situations when it asks us if we want to
sleep. When we don't respond, iokit gives us 30 seconds to
respond/deal-with-our-issues then goes to sleep. We don't need to be registered
as an app the iokit needs to ask to sleep all of the time, and we keep getting
asked in situations where we're not preparted to respond.
I guess you've already seen this, but surely bug #197863 is involved. In the
timeframe mentioned Simon Fraser moved some files around and created
nsToolkitBase.cpp and implemented those sleep routines to fix another bug.

Does anyone know, whether Camino has to reregister for sleep events after a
sleep has happened?
Severity: major → critical
This is easy to reproduce, add printfs to nsToolkitBase.cpp in
ToolkitSleepWakeCallback. I launch camino, and immediately put the system to
sleep. It sleeps quickly. upon wakeup I have the the following in my run log:

called ToolkitSleepWakeCallback
message was kIOMessageSystemWillSleep
2004-01-17 21:26:59.831 Camino[2962] Updating proxies
2004-01-17 21:27:04.432 Camino[2962] Updating proxies

then my mouse freezes / disappears for about 1-2 seconds and then I get this
message:

called ToolkitSleepWakeCallback

and that's it. So there is an *additional* problem here potentially. But to
consider the problem of delayed sleep first.

Now close the window and sleep again. Observe that it takes 30 seconds to sleep,
and there are no printfs this time.

So, the problem is that the ToolkitSleepWakeCallback is never being called at all.

I also wondering if bug #197863 could have been fixed without involving IOKit
power management functions. It seems that this is a source of potential
complexity and bugs.
Assignee: pinkerton → sbwoodside
Status: ASSIGNED → NEW
Attached patch fixSplinter Review
It's a three-line fix for the problem. I added
IODeregisterForSystemPower(&mPowerNotifier); which is necessary to preven IOKit
from attempting to contact the app for power management status. Also I fixed a
typo.
Attachment #139313 - Flags: review?
even though the patch is to mozilla/widget/src/mac, you have to go to
widget/src/cocoa to make. there's a symlink for nsToolkitBase.cpp there. so
basucally apply the patch, then
cd mozilla/widget/src/cocoa
make
pushd ../../../embedding/config ; make ; popd
then make camino
Comment on attachment 139313 [details] [diff] [review]
fix

looks good, compiles and seems to fix the problem
Attachment #139313 - Flags: review? → review+
Attachment #139313 - Flags: superreview?
Attachment #139313 - Flags: review?
Comment on attachment 139313 [details] [diff] [review]
fix

>+  CFRunLoopSourceRef   mSleepWakeNotificationRLS;
>+  io_object_t       mPowerNotifier;

Fix the alignment, and sr=sfraser (clearing bogus self-review request).
Attachment #139313 - Flags: superreview?
Attachment #139313 - Flags: superreview+
Attachment #139313 - Flags: review?
it's aligned with a whole bunch of other vars further up
landed on trunk
Status: NEW → RESOLVED
Closed: 21 years ago21 years ago
Resolution: --- → FIXED
Using the 2004012303 NB on both a iBook and PowerBook, I can't reproduce the
issue described. Any else see this problem occuring with today's build ?
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: