also save/restore pool pos in repodata load callback
authorMichael Schroeder <mls@suse.de>
Mon, 23 Sep 2013 09:42:02 +0000 (11:42 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 23 Sep 2013 09:42:02 +0000 (11:42 +0200)
src/repodata.c

index a983a5398ab4cfc086839a2826a080f17543738d..73229f8ef89a6bf8e33c8dc6b7515cb2256439d4 100644 (file)
@@ -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;
 }