1 |
commit: b2e26ba79e1ef41594d1ec1bb032acf7fb6a1403 |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon May 16 01:25:59 2011 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon May 16 01:25:59 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b2e26ba7 |
7 |
|
8 |
preserve-libs: lock vardb for removeFromContents |
9 |
|
10 |
--- |
11 |
pym/portage/dbapi/vartree.py | 31 ++++++++++++++++++++----------- |
12 |
1 files changed, 20 insertions(+), 11 deletions(-) |
13 |
|
14 |
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py |
15 |
index 4d7e6b8..cae8cd0 100644 |
16 |
--- a/pym/portage/dbapi/vartree.py |
17 |
+++ b/pym/portage/dbapi/vartree.py |
18 |
@@ -1548,10 +1548,14 @@ class dblink(object): |
19 |
unmerge_no_replacement) |
20 |
if cpv_lib_map: |
21 |
self._remove_preserved_libs(cpv_lib_map) |
22 |
- for cpv, removed in cpv_lib_map.items(): |
23 |
- if not self.vartree.dbapi.cpv_exists(cpv): |
24 |
- continue |
25 |
- self.vartree.dbapi.removeFromContents(cpv, removed) |
26 |
+ self.vartree.dbapi.lock() |
27 |
+ try: |
28 |
+ for cpv, removed in cpv_lib_map.items(): |
29 |
+ if not self.vartree.dbapi.cpv_exists(cpv): |
30 |
+ continue |
31 |
+ self.vartree.dbapi.removeFromContents(cpv, removed) |
32 |
+ finally: |
33 |
+ self.vartree.dbapi.unlock() |
34 |
|
35 |
plib_registry.store() |
36 |
finally: |
37 |
@@ -3524,12 +3528,19 @@ class dblink(object): |
38 |
# same cpv then the vdb entry no longer belongs |
39 |
# to it, so we'll have to get the slot and counter |
40 |
# from plib_registry._data instead. |
41 |
+ self.vartree.dbapi.lock() |
42 |
try: |
43 |
- slot, counter = self.vartree.dbapi.aux_get( |
44 |
- cpv, ["SLOT", "COUNTER"]) |
45 |
- has_vdb_entry = True |
46 |
- except KeyError: |
47 |
- pass |
48 |
+ try: |
49 |
+ slot, counter = self.vartree.dbapi.aux_get( |
50 |
+ cpv, ["SLOT", "COUNTER"]) |
51 |
+ except KeyError: |
52 |
+ pass |
53 |
+ else: |
54 |
+ has_vdb_entry = True |
55 |
+ self.vartree.dbapi.removeFromContents( |
56 |
+ cpv, paths) |
57 |
+ finally: |
58 |
+ self.vartree.dbapi.unlock() |
59 |
|
60 |
if not has_vdb_entry: |
61 |
# It's possible for previously unmerged packages |
62 |
@@ -3553,8 +3564,6 @@ class dblink(object): |
63 |
|
64 |
remaining = [f for f in plib_dict[cpv] if f not in paths] |
65 |
plib_registry.register(cpv, slot, counter, remaining) |
66 |
- if has_vdb_entry: |
67 |
- self.vartree.dbapi.removeFromContents(cpv, paths) |
68 |
|
69 |
plib_registry.store() |
70 |
finally: |