Author: mlschroe Date: Tue Oct 21 19:08:53 2008 New Revision: 11433 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11433&view=rev Log: - make repo_add_solv fast again Modified: trunk/sat-solver/src/repo_solv.c Modified: trunk/sat-solver/src/repo_solv.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo_solv.c?rev=11433&r1=11432&r2=11433&view=diff ============================================================================== --- trunk/sat-solver/src/repo_solv.c (original) +++ trunk/sat-solver/src/repo_solv.c Tue Oct 21 19:08:53 2008 @@ -299,6 +299,7 @@ * functions to add data to our incore memory space */ +#define INCORE_ADD_CHUNK 8192 static void incore_add_id(Repodata *data, Id x) @@ -307,8 +308,8 @@ /* make sure we have at least 5 bytes free */ if (data->incoredatafree < 5) { - data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + 1024); - data->incoredatafree = 1024; + data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + INCORE_ADD_CHUNK); + data->incoredatafree = INCORE_ADD_CHUNK; } dp = data->incoredata + data->incoredatalen; if (x < 0) @@ -333,8 +334,8 @@ { if (data->incoredatafree < len) { - data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + 1024 + len); - data->incoredatafree = 1024 + len; + data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + INCORE_ADD_CHUNK + len); + data->incoredatafree = INCORE_ADD_CHUNK + len; } memcpy(data->incoredata + data->incoredatalen, buf, len); data->incoredatafree -= len; @@ -374,8 +375,8 @@ /* make sure we have at least 4 bytes free */ if (data->incoredatafree < 4) { - data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + 1024); - data->incoredatafree = 1024; + data->incoredata = sat_realloc(data->incoredata, data->incoredatalen + INCORE_ADD_CHUNK); + data->incoredatafree = INCORE_ADD_CHUNK; } dp = data->incoredata + data->incoredatalen; *dp++ = x >> 24; @@ -535,6 +536,7 @@ int left; Id stack[10]; int keydepth; + int needchunk; /* need a new chunk of data */ struct _Stringpool *spool; @@ -1007,6 +1009,7 @@ nentries = 0; keydepth = 0; s = 0; + needchunk = 1; for(;;) { key = *keyp++; @@ -1015,6 +1018,8 @@ #endif if (!key) { + if (keydepth <= 2) + needchunk = 1; if (nentries) { if (s && keydepth == 2) @@ -1041,10 +1046,10 @@ continue; } - if (keydepth <= 2) + if (keydepth == 0) + data.mainschemaoffsets[keyp - 1 - (schemadata + schemata[data.mainschema])] = data.incoredatalen; + if (needchunk) { - if (keydepth == 0) - data.mainschemaoffsets[keyp - 1 - (schemadata + schemata[data.mainschema])] = data.incoredatalen; /* read data chunk to dp */ if (data.error) break; @@ -1069,6 +1074,7 @@ allsize -= l; left += l; dp = buf; + needchunk = 0; } #if 0 -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org