On Wed, Apr 11, 2012 at 3:14 PM, Henning Brauer
<[email protected]> wrote:
> * patrick keshishian <[email protected]> [2012-04-11 14:55]:
>> On Wed, Apr 11, 2012 at 12:20:30PM +0200, Henning Brauer wrote:
>> don't you need two different index vars for this next
>> section?
>
> no, why?
I put the caveat that I am not familiar with the code (and its use).
So apologies if I'm making grave assumptions on the use case (more
below).
>> > + for (i = 0; i < n; i++)
>> > + if (i < npflogifs)
>> > + p[i] = pflogifs[i];
>> > + else
>> > + p[i] = NULL;
>
> i think that is pretty clear: each slot in the newly allocated p gets
> the same value as it had in the old pflogifs, once we're at the end of
> pflogifs we set the remaining slots to NULL. unused slots were NULL
> before so just inheriting the NULL is safe.
Unless pflog_clone_destroy() takes out one in the middle of the list.
I probably assumed too much.
>> something like the following with caveats that a) it is
>> 5am-ish for me and b) i did not try compiling it:
>>
>> for (i = 0, j = 0; i < n; i++, j++) {
>> for (; j < npflogifs && NULL == pflogifs[j]; j++)
>> ;
>> if (j == npflogifs)
>> break;
>> p[i] = pflogifs[j];
>> }
>> for (; i < n; i++)
>> p[i] = NULL;
>
> i gave up following this after a bit.
The loop is like yours, but looks out for an NULL-ed out pflogifs
entry (from pflog_clone_destroy()?). If one is detected, adjust index
into pflogifs accordingly.
Now, if it is the case that pflog_clone_destroy() won't ever take out
an entry in the middle of pflogifs, then ignore my comments.
>> > +
>> > + if(pflogifs)
>> ^^ nit
>
> fixed
>
>> > s = splnet();
>> > pflogifs[pflogif->sc_unit] = NULL;
>> > LIST_REMOVE(pflogif, sc_list);
>> > +
>> > + for (i = npflogifs; i > 0 && pflogifs[i - 1] != NULL; i--)
>> > + ; /* nothing */
>> > + if (i < npflogifs)
>> > + pflogifs_resize(i); /* error harmless here */
>>
>> So, if the last pflogifs entry is NULL don't resize
>> down? Not really questioning the logic, but want to
>> make sure I understand that's what is meant, cause
>> there is an easier check for that than the for()-loop.
>> Caveats: a) 5am-ish, b) not familiar with code.
>
> walk the array backwards until we find the first non-empty slot, then
> shrink it to that.
OK. So the _destroy() code will always take out entries from the end
of the pflogifs array.
Sorry for the noise.
--patrick
> --
> Henning Brauer, [email protected], [email protected]
> BS Web Services, http://bsws.de, Full-Service ISP
> Secure Hosting, Mail and DNS Services. Dedicated Servers, Root to Fully
Managed
> Henning Brauer Consulting, http://henningbrauer.com/