mirrorlist: Use a thread-local copy of the tree to prevent changing the global one
This makes sure that the global version does not get changed while processing a request, keeping the hostnet check working across requests. Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
This commit is contained in:
parent
ed1aa2476b
commit
738e67c90c
1 changed files with 5 additions and 3 deletions
|
@ -6,6 +6,7 @@
|
|||
|
||||
# standard library modules in alphabetical order
|
||||
from collections import defaultdict
|
||||
import copy
|
||||
import datetime
|
||||
import getopt
|
||||
import logging
|
||||
|
@ -234,11 +235,12 @@ def tree_lookup(tree, ip, field, maxResults=None):
|
|||
# and we'll get a new copy of the tree from our parent the next time it
|
||||
# fork()s.
|
||||
# returns a list of tuples (prefix, data)
|
||||
ltree = copy.deepcopy(tree)
|
||||
result = []
|
||||
len_data = 0
|
||||
if ip is None:
|
||||
return result
|
||||
node = tree.search_best(ip.strNormal())
|
||||
node = ltree.search_best(ip.strNormal())
|
||||
while node is not None:
|
||||
prefix = node.prefix
|
||||
if type(node.data[field]) == list:
|
||||
|
@ -248,8 +250,8 @@ def tree_lookup(tree, ip, field, maxResults=None):
|
|||
t = (prefix, node.data[field],)
|
||||
result.append(t)
|
||||
if maxResults is None or len_data < maxResults:
|
||||
tree.delete(prefix)
|
||||
node = tree.search_best(ip.strNormal())
|
||||
ltree.delete(prefix)
|
||||
node = ltree.search_best(ip.strNormal())
|
||||
else:
|
||||
break
|
||||
return result
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue