From: Michael Schroeder Date: Fri, 24 Apr 2020 09:54:01 +0000 (+0200) Subject: Clear repodata->lasthandle for freed/swapped solvable X-Git-Tag: 0.7.13~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae9db8d7f07da4739006aee583ac807faaa7266f;p=thirdparty%2Flibsolv.git Clear repodata->lasthandle for freed/swapped solvable Fixes issue #377 --- diff --git a/src/repo.c b/src/repo.c index 45e8681e..b266d8d5 100644 --- a/src/repo.c +++ b/src/repo.c @@ -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)); diff --git a/src/repodata.c b/src/repodata.c index 0580cff6..4e75b6d6 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -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; }