• D
    Fix updating of haveTheBuck in RPC client to be race-free · e9708637
    Daniel P. Berrange 提交于
    When one thread passes the buck to another thread, it uses
    virCondSignal to wake up the target thread. The variable
    'haveTheBuck' is not updated in a race-free manner when
    this occurs. The current thread sets it to false, and the
    woken up thread sets it to true. There is a window where
    a 3rd thread can come in and grab the buck.
    
    Even if this didn't lead to crashes & deadlocks, this would
    still result in unfairness in the buckpassing algorithm.
    
    A better solution is to *never* set haveTheBuck to false
    when we're passing the buck. Only set it to false when there
    is no further thread waiting for the buck.
    
    * src/rpc/virnetclient.c: Only set haveTheBuck to false
      if no thread is waiting
    e9708637
virnetclient.c 51.4 KB