• D
    Fix race in ref counting when handling RPC jobs · 0302391e
    Daniel P. Berrange 提交于
    When an incoming RPC message is ready for processing,
    
      virNetServerClientDispatchRead()
    
    will invoke the 'dispatchFunc' callback. This is set to
    
      virNetServerDispatchNewMessage
    
    This function puts the message + client in a queue for processing by the thread
    pool. The thread pool worker function is
    
      virNetServerHandleJob
    
    The first thing this does is acquire an extra reference on the 'client'.
    
    Unfortunately, between the time the message+client are put on the thread pool
    queue, and the time the worker runs, the client object may have had its last
    reference removed.
    
    We clearly need to add the reference to the client object before putting the
    client on the processing queue
    
    * src/rpc/virnetserverclient.c: Add a reference to the client when
      invoking the dispatch function
    * src/rpc/virnetserver.c: Don't acquire a reference to the client
      when in the worker thread
    0302391e
virnetserverclient.c 25.7 KB