On 05/05/2018 16:35, Lidong Chen wrote: > @@ -2635,12 +2637,20 @@ static ssize_t qio_channel_rdma_writev(QIOChannel > *ioc, > { > QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(ioc); > QEMUFile *f = rioc->file; > - RDMAContext *rdma = rioc->rdma; > + RDMAContext *rdma; > int ret; > ssize_t done = 0; > size_t i; > size_t len = 0; > > + rcu_read_lock(); > + rdma = atomic_rcu_read(&rioc->rdmaout); > + > + if (!rdma) { > + rcu_read_unlock(); > + return -EIO; > + } > + > CHECK_ERROR_STATE(); > > /*
I am not sure I understand this. It would probably be wrong to use the output side from two threads at the same time, so why not use two mutexes? Also, who is calling qio_channel_rdma_close in such a way that another thread is still using it? Would it be possible to synchronize with the other thread *before*, for example with qemu_thread_join? Thanks, Paolo