]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Clear repodata->lasthandle for freed/swapped solvable
authorMichael Schroeder <mls@suse.de>
Fri, 24 Apr 2020 09:54:01 +0000 (11:54 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 24 Apr 2020 09:54:01 +0000 (11:54 +0200)
Fixes issue #377

src/repo.c
src/repodata.c

index 45e8681ebbb510b128a11d72d5c8a5d0b001829f..b266d8d575d7a27c8a1c4b2a87359db3693ed333 100644 (file)
@@ -213,6 +213,8 @@ repo_free_solvable_block(Repo *repo, Id start, int count, int reuseids)
              int j;
              for (j = dstart; j < dend; j++)   
                data->attrs[j - data->start] = solv_free(data->attrs[j - data->start]);
+             if (data->lasthandle >= dstart && data->lasthandle < dend)
+               data->lasthandle = 0;
            }
          if (data->incoreoffset)
            memset(data->incoreoffset + (dstart - data->start), 0, (dend - dstart) * sizeof(Id));
index 0580cff6f36dc1e0a45d64524763f565c235f9a6..4e75b6d61a9c4f9019a61e64c1f746501ebefdf4 100644 (file)
@@ -3100,6 +3100,8 @@ repodata_swap_attrs(Repodata *data, Id dest, Id src)
   tmpattrs = data->attrs[dest - data->start];
   data->attrs[dest - data->start] = data->attrs[src - data->start];
   data->attrs[src - data->start] = tmpattrs;
+  if (data->lasthandle == src || data->lasthandle == dest)
+    data->lasthandle = 0;
 }