dirpool_make_dirtraverse(Dirpool *dp)
{
Id parent, i, *dirtraverse;
+ dp->dirtraverse = solv_free(dp->dirtraverse);
if (!dp->ndirs)
return;
- dp->dirs = solv_extend_resize(dp->dirs, dp->ndirs, sizeof(Id), DIR_BLOCK);
dirtraverse = solv_calloc_block(dp->ndirs, sizeof(Id), DIR_BLOCK);
for (i = 0; i < dp->ndirs; i++)
{
/* grow hash table if load factor exceeds 50% */
if ((Hashval)dp->ndirs * 2 >= dp->dirhashmask)
- dirpool_resize_hash(dp, DIR_BLOCK);
+ {
+ /* hack: repo_add_solv will not use DIR_BLOCK, so realloc here */
+ if (!dp->dirhashmask)
+ dp->dirs = solv_extend_resize(dp->dirs, dp->ndirs, sizeof(Id), DIR_BLOCK);
+ dirpool_resize_hash(dp, DIR_BLOCK);
+ }
ht = dp->dirhashtbl;
hm = dp->dirhashmask;
/******* Part 3: Dirs ***********************************************/
if (numdir)
{
+ /* note that we do not use DIR_BLOCK here. See comment in dirpool_add_dir */
data.dirpool.dirs = solv_malloc2(numdir, sizeof(Id));
data.dirpool.ndirs = numdir;
data.dirpool.dirs[0] = 0; /* dir 0: virtual root */