On 2014年08月12日 13:28, Hitoshi Mitake wrote: > At Tue, 12 Aug 2014 09:25:49 +0800, > Ruoyu wrote: >> >> On 2014年08月11日 21:45, Hitoshi Mitake wrote: >>> At Mon, 11 Aug 2014 18:11:44 +0800, >>> Ruoyu wrote: >>>> Nothing wrong with fixing it, alhough I don't know exactly >>>> what will be happened if not patching it. >>>> >>>> Signed-off-by: Ruoyu <lian...@ucweb.com> >>>> --- >>>> sheep/vdi.c | 3 ++- >>>> 1 file changed, 2 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/sheep/vdi.c b/sheep/vdi.c >>>> index 05cae7b..77dc253 100644 >>>> --- a/sheep/vdi.c >>>> +++ b/sheep/vdi.c >>>> @@ -372,11 +372,12 @@ static bool add_new_participant(struct >>>> vdi_state_entry *entry, >>>> return true; >>>> } >>>> >>>> - idx = entry->nr_participants++; >>>> + idx = entry->nr_participants; >>>> memcpy(&entry->participants[idx], owner, sizeof(*owner)); >>>> entry->participants_state[idx] = >>>> is_modified(entry) ? >>>> SHARED_LOCK_STATE_INVALIDATED : SHARED_LOCK_STATE_SHARED; >>>> + entry->nr_participants++; >>> I think this patch doesn't change the function. Does this fixes a bug? >> It fixes a logical error. Otherwise, there should be a hole in the array >> if new participant is added. >> For example, >> >> // supposed entry->nr_participants is 2; >> idx = entry->nr_participants++; >> // idx is 3 now; > No, idx is 2 in this case. Specification of C guarantees it. e.g. > > #include <stdio.h> > > int main(void) > { > int n = 2, m; > > m = n++; > printf("n: %d, m: %d\n", n, m); > > return 0; > } > > if you execute the above program, you can see an output: > n: 3, m: 2 > > If the expression of increment is put before the incremented variable, > the assigned variable will be equal to the incremented result. OK, you are right. The incremented variable confused me. > > Thanks, > Hitoshi
-- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog