[equo] avoid race condition when calling Client.shutdown() in finally context

This commit is contained in:
Fabio Erculiani
2010-07-21 18:13:18 +02:00
parent 8ee58ce65a
commit 5bab482ed9
7 changed files with 52 additions and 35 deletions

View File

@@ -21,8 +21,9 @@ def cache(options):
rc = 0
from entropy.client.interfaces import Client
entropy_client = Client(noclientdb = True)
entropy_client = None
try:
entropy_client = Client(noclientdb = True)
if cmd == "clean":
entropy_client.output(
blue(_("Cleaning Entropy cache, please wait ...")),
@@ -39,7 +40,8 @@ def cache(options):
else:
rc = -10
finally:
entropy_client.shutdown()
if entropy_client is not None:
entropy_client.shutdown()
return rc

View File

@@ -43,8 +43,9 @@ def configurator(options):
return 1
from entropy.client.interfaces import Client
etp_client = Client()
etp_client = None
try:
etp_client = Client()
cmd = options.pop(0)
if cmd == "info":
rc = confinfo(etp_client)
@@ -53,7 +54,8 @@ def configurator(options):
else:
rc = -10
finally:
etp_client.shutdown()
if etp_client is not None:
etp_client.shutdown()
return rc

View File

@@ -32,6 +32,7 @@ def repositories(options):
# Options available for all the packages submodules
myopts = options[1:]
cmd = options[0]
e_req_force_update = False
rc = 0
repo_names = []
@@ -46,9 +47,10 @@ def repositories(options):
repo_names.append(opt)
from entropy.client.interfaces import Client
entropy_client = Client(noclientdb = True)
entropy_client = None
try:
if options[0] == "update":
entropy_client = Client(noclientdb = True)
if cmd == "update":
# check if I am root
er_txt = darkred(_("You must be either root or in this group:")) + \
" " + etpConst['sysgroup']
@@ -61,11 +63,11 @@ def repositories(options):
rc = _do_sync(entropy_client, repo_identifiers = repo_names,
force = e_req_force_update)
elif options[0] == "status":
elif cmd == "status":
for repo in SystemSettings['repositories']['order']:
_show_repository_info(entropy_client, repo)
elif options[0] == "repo":
elif cmd == "repo":
er_txt = darkred(_("You must be root"))
if not entropy.tools.is_root():
@@ -92,7 +94,7 @@ def repositories(options):
else:
rc = -10
elif options[0] == "notice":
elif cmd == "notice":
myopts = options[1:]
myopts = [x for x in myopts if x in \
SystemSettings['repositories']['available']]
@@ -105,7 +107,8 @@ def repositories(options):
else:
rc = -10
finally:
entropy_client.shutdown()
if entropy_client is not None:
entropy_client.shutdown()
return rc

View File

@@ -74,23 +74,25 @@ def database(options):
print_error(red(mytxt+"."))
return 1
etp_client = Client(noclientdb = True)
cmd = options[0]
etp_client = None
try:
etp_client = Client(noclientdb = True)
if options[0] == "generate":
if cmd == "generate":
return _database_generate(etp_client)
elif options[0] == "check":
elif cmd == "check":
return _database_check(etp_client)
elif options[0] == "resurrect":
elif cmd == "resurrect":
return _database_resurrect(etp_client)
elif options[0] == "revdeps":
elif cmd == "revdeps":
return _database_revdeps(etp_client)
elif options[0] in ("counters", "spmuids",):
if options[0] == "counters":
elif cmd in ("counters", "spmuids",):
if cmd == "counters":
print_warning("")
print_warning("'%s' %s: '%s'" % (
purple("equo database counters"),
@@ -99,8 +101,8 @@ def database(options):
print_warning("")
return _database_counters(etp_client)
elif options[0] in ("gentoosync", "spmsync",):
if options[0] == "gentoosync":
elif cmd in ("gentoosync", "spmsync",):
if cmd == "gentoosync":
print_warning("")
print_warning("'%s' %s: '%s'" % (
purple("equo database gentoosync"),
@@ -109,24 +111,25 @@ def database(options):
print_warning("")
return _database_spmsync(etp_client)
elif options[0] == "backup":
elif cmd == "backup":
status, err_msg = etp_client.backup_repository(
etpConst['etpdatabaseclientfilepath'])
if status:
return 0
return 1
elif options[0] == "restore":
elif cmd == "restore":
return _database_restore(etp_client)
elif options[0] == "vacuum":
elif cmd == "vacuum":
return _database_vacuum(etp_client)
elif options[0] == "info":
elif cmd == "info":
return _getinfo(etp_client)
finally:
etp_client.shutdown()
if etp_client is not None:
etp_client.shutdown()
return -10

View File

@@ -36,11 +36,13 @@ def security(options):
elif opt == "--force":
force = True
cmd = options[0]
from entropy.client.interfaces import Client
entropy_client = Client()
entropy_client = None
try:
entropy_client = Client()
if options[0] == "update":
if cmd == "update":
security_intf = entropy_client.Security()
er_txt = darkred(_("You must be either root or in this group:")) + \
" " + etpConst['sysgroup']
@@ -49,22 +51,23 @@ def security(options):
return 1
rc = security_intf.sync(force = force)
elif options[0] == "list":
elif cmd == "list":
security_intf = entropy_client.Security()
rc = list_advisories(security_intf, only_affected = only_affected,
only_unaffected = only_unaffected)
elif options[0] == "install":
elif cmd == "install":
security_intf = entropy_client.Security()
rc = install_packages(entropy_client, security_intf, fetch = fetch)
elif options[0] == "info":
elif cmd == "info":
security_intf = entropy_client.Security()
rc = show_advisories_info(security_intf, options[1:])
else:
rc = -10
finally:
entropy_client.shutdown()
if entropy_client is not None:
entropy_client.shutdown()
return rc

View File

@@ -57,8 +57,9 @@ def smart(options):
rc = 0
from entropy.client.interfaces import Client
entropy_client = Client()
entropy_client = None
try:
entropy_client = Client()
if options[0] == "application":
rc = smart_apps_handler(entropy_client, options[1:])
@@ -76,7 +77,8 @@ def smart(options):
else:
rc = -10
finally:
entropy_client.shutdown()
if entropy_client is not None:
entropy_client.shutdown()
return rc

View File

@@ -38,9 +38,10 @@ def ugc(options):
rc = -10
from entropy.client.interfaces import Client
entropy_client = Client()
entropy_client.UGC.show_progress = True
entropy_client = None
try:
entropy_client = Client()
entropy_client.UGC.show_progress = True
if cmd == "login":
if options:
rc = _ugc_login(entropy_client, options[0],
@@ -55,7 +56,8 @@ def ugc(options):
if options:
rc = _ugc_votes(entropy_client, options)
finally:
entropy_client.shutdown()
if entropy_client is not None:
entropy_client.shutdown()
return rc