mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
migration: Make from_dst_file accesses thread-safe
Accessing from_dst_file is potentially racy in current code base like below: if (s->from_dst_file) do_something(s->from_dst_file); Because from_dst_file can be reset right after the check in another thread (rp_thread). One example is migrate_fd_cancel(). Use the same qemu_file_lock to protect it too, just like to_dst_file. When it's safe to access without lock, comment it. There's one special reference in migration_thread() that can be replaced by the newly introduced rp_thread_created flag. Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Lukas Straub <lukasstraub2@web.de> Message-Id: <20210722175841.938739-3-peterx@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> with Peter's fixup
This commit is contained in:
parent
53021ea165
commit
43044ac0ee
3 changed files with 35 additions and 13 deletions
|
@ -154,12 +154,13 @@ struct MigrationState {
|
|||
QemuThread thread;
|
||||
QEMUBH *vm_start_bh;
|
||||
QEMUBH *cleanup_bh;
|
||||
/* Protected by qemu_file_lock */
|
||||
QEMUFile *to_dst_file;
|
||||
QIOChannelBuffer *bioc;
|
||||
/*
|
||||
* Protects to_dst_file pointer. We need to make sure we won't
|
||||
* yield or hang during the critical section, since this lock will
|
||||
* be used in OOB command handler.
|
||||
* Protects to_dst_file/from_dst_file pointers. We need to make sure we
|
||||
* won't yield or hang during the critical section, since this lock will be
|
||||
* used in OOB command handler.
|
||||
*/
|
||||
QemuMutex qemu_file_lock;
|
||||
|
||||
|
@ -192,6 +193,7 @@ struct MigrationState {
|
|||
|
||||
/* State related to return path */
|
||||
struct {
|
||||
/* Protected by qemu_file_lock */
|
||||
QEMUFile *from_dst_file;
|
||||
QemuThread rp_thread;
|
||||
bool error;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue