On Aug 28, 2013, at 9:39 AM, Jarno Rajahalme <jrajaha...@nicira.com> wrote:
>> One specific race that I was concerned about is:
>> 
>> 1. This code in udpif_miss_handler() checks n_upcalls and sees that it
>>  is zero.
>> 
>>       if (!handler->n_upcalls) {
>> 
>> 2. This code in recv_upcalls() signals wake_cond:
>> 
>>   for (n = 0; n < udpif->n_handlers; ++n) {
>>       handler = &udpif->handlers[n];
>>       if (handler->n_new_upcalls) {
>>           handler->n_new_upcalls = 0;
>>           xpthread_cond_signal(&handler->wake_cond);
>>       }
>>   }
>> 
>> 3. This code in udpif_miss_handler() starts waiting on wake_cond:
>> 
>>           ovs_mutex_cond_wait(&handler->wake_cond, &handler->mutex);
>> 
>> Maybe this race cannot happen, because n_upcalls only changes with the
>> mutex taken.  I guess that's the case.
> 

On a second thought, I think it is better to be conservative here and lock 
while cond_signaling. That way there will be no nasty surprises if some of the 
other code gets reorganized.

  Jarno

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to