|
Panu Matilainen |
d06308 |
commit 7d88d5e54a9c3fa2b7fb443921c8adb799051784
|
|
Panu Matilainen |
d06308 |
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
Panu Matilainen |
d06308 |
Date: Wed Feb 1 17:48:20 2012 +0200
|
|
Panu Matilainen |
d06308 |
|
|
Panu Matilainen |
d06308 |
Don't free up file info sets on transaction test-runs
|
|
Panu Matilainen |
d06308 |
|
|
Panu Matilainen |
d06308 |
- We'd like to get rid of the potentially huge amounts of memory
|
|
Panu Matilainen |
d06308 |
eaten by file info sets as early as possible, but when there's a
|
|
Panu Matilainen |
d06308 |
chance that we'll get called again with either added transacation
|
|
Panu Matilainen |
d06308 |
elements or on-disk changes, such as %pretrans changing something
|
|
Panu Matilainen |
d06308 |
underneath us, we need to (be able to) recalculate everything
|
|
Panu Matilainen |
d06308 |
from scratch. Only free up the memory when we know we dont need
|
|
Panu Matilainen |
d06308 |
it anymore, ie on an actual transaction run.
|
|
Panu Matilainen |
d06308 |
- This doesn't change anything for rpm itself, for yum and others
|
|
Panu Matilainen |
d06308 |
which do a separate test-transaction first, it means %pretrans
|
|
Panu Matilainen |
d06308 |
directory<->symlink replacement hacks and the like have a chance
|
|
Panu Matilainen |
d06308 |
of working again. I'm sure there's a bug filed on this somewhere but...
|
|
Panu Matilainen |
d06308 |
(cherry picked from commit cef18c94807af0935b7796c462aab8ed39f0f376)
|
|
Panu Matilainen |
d06308 |
|
|
Panu Matilainen |
d06308 |
diff --git a/lib/transaction.c b/lib/transaction.c
|
|
Panu Matilainen |
d06308 |
index 56ebc17..8d29ab9 100644
|
|
Panu Matilainen |
d06308 |
--- a/lib/transaction.c
|
|
Panu Matilainen |
d06308 |
+++ b/lib/transaction.c
|
|
Panu Matilainen |
d06308 |
@@ -1355,12 +1355,14 @@ static int rpmtsPrepare(rpmts ts)
|
|
Panu Matilainen |
d06308 |
if (rpmChrootOut())
|
|
Panu Matilainen |
d06308 |
rc = -1;
|
|
Panu Matilainen |
d06308 |
|
|
Panu Matilainen |
d06308 |
- /* File info sets, fp caches etc not needed beyond here, free 'em up. */
|
|
Panu Matilainen |
d06308 |
- pi = rpmtsiInit(ts);
|
|
Panu Matilainen |
d06308 |
- while ((p = rpmtsiNext(pi, 0)) != NULL) {
|
|
Panu Matilainen |
d06308 |
- rpmteSetFI(p, NULL);
|
|
Panu Matilainen |
d06308 |
+ /* On actual transaction, file info sets are not needed after this */
|
|
Panu Matilainen |
d06308 |
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_TEST|RPMTRANS_FLAG_BUILD_PROBS))) {
|
|
Panu Matilainen |
d06308 |
+ pi = rpmtsiInit(ts);
|
|
Panu Matilainen |
d06308 |
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
|
|
Panu Matilainen |
d06308 |
+ rpmteSetFI(p, NULL);
|
|
Panu Matilainen |
d06308 |
+ }
|
|
Panu Matilainen |
d06308 |
+ rpmtsiFree(pi);
|
|
Panu Matilainen |
d06308 |
}
|
|
Panu Matilainen |
d06308 |
- pi = rpmtsiFree(pi);
|
|
Panu Matilainen |
d06308 |
|
|
Panu Matilainen |
d06308 |
exit:
|
|
Panu Matilainen |
d06308 |
ht = rpmFpHashFree(ht);
|