From: Michael Schroeder Date: Mon, 23 Sep 2013 09:42:02 +0000 (+0200) Subject: also save/restore pool pos in repodata load callback X-Git-Tag: BASE-SuSE-Code-13_1-Branch~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=078a4281aac325d767fa7e75f5878c395962b27c;p=thirdparty%2Flibsolv.git also save/restore pool pos in repodata load callback --- diff --git a/src/repodata.c b/src/repodata.c index a983a539..73229f8e 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -3282,6 +3282,7 @@ repodata_load_stub(Repodata *data) Pool *pool = repo->pool; int r, i; struct _Pool_tmpspace oldtmpspace; + Datapos oldpos; if (!pool->loadcallback) { @@ -3290,16 +3291,20 @@ repodata_load_stub(Repodata *data) } data->state = REPODATA_LOADING; - /* save tmp space */ + /* save tmp space and pos */ oldtmpspace = pool->tmpspace; memset(&pool->tmpspace, 0, sizeof(pool->tmpspace)); + oldpos = pool->pos; r = pool->loadcallback(pool, data, pool->loadcallbackdata); - /* restore tmp space */ + /* restore tmp space and pos */ for (i = 0; i < POOL_TMPSPACEBUF; i++) solv_free(pool->tmpspace.buf[i]); pool->tmpspace = oldtmpspace; + if (r && oldpos.repo == repo && oldpos.repodataid == data->repodataid) + memset(&oldpos, 0, sizeof(oldpos)); + pool->pos = oldpos; data->state = r ? REPODATA_AVAILABLE : REPODATA_ERROR; }