power: avoid filesystem access if powerd absent

On commodity hardware without olpc-powerd, there is unnecessary
filesystem access.

On XO laptop hardware there are unnecessary errors in log for every
object delete:

	ERROR root: Inhibit Suspend: Could not delete file
	/var/run/powerd-inhibit-suspend/1773

	Exception AttributeError: "'NoneType' object has no attribute
	'endswith'" in <bound method PowerManager.__del__ of
	<sugar3.power.PowerManager instance at 0xa15962c>> ignored

The Clock activity in speaking mode is a good reproducer.

Following changes are made:

- move the directory check to __init__, and set self._path to None if
  olpc-powerd is not present,

- on inhibit_suspend, use self._path, which avoids a check of the
  directory,

- on restore_suspend or __del__, avoid a call to os.unlink if
  olpc-powerd is not present.
This commit is contained in:
James Cameron 2015-05-13 09:14:30 +10:00 committed by Sam Parkinson
parent 2ddd64bace
commit f1fc9886cc

View File

@ -38,7 +38,10 @@ class PowerManager():
def __init__(self): def __init__(self):
self._suspend_inhibit_counter = 0 self._suspend_inhibit_counter = 0
self._path = os.path.join(_POWERD_INHIBIT_DIR, str(os.getpid())) if os.path.exists(_POWERD_INHIBIT_DIR):
self._path = os.path.join(_POWERD_INHIBIT_DIR, str(os.getpid()))
else:
self._path = None
def __del__(self): def __del__(self):
self._remove_flag_file() self._remove_flag_file()
@ -47,10 +50,7 @@ class PowerManager():
return True return True
def inhibit_suspend(self): def inhibit_suspend(self):
if not os.path.exists(_POWERD_INHIBIT_DIR): if self._path and self._suspend_inhibit_counter == 0:
return
if self._suspend_inhibit_counter == 0:
try: try:
with open(self._path, 'w') as flag_file: with open(self._path, 'w') as flag_file:
flag_file.write('') flag_file.write('')
@ -77,8 +77,9 @@ class PowerManager():
self._remove_flag_file() self._remove_flag_file()
def _remove_flag_file(self): def _remove_flag_file(self):
try: if self._path:
os.unlink(self._path) try:
except OSError: os.unlink(self._path)
pass except OSError:
pass
self._suspend_inhibit_counter = 0 self._suspend_inhibit_counter = 0