mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-28 04:21:50 -06:00
test-bdrv-drain: Take graph lock more selectively
If we take a reader lock, we can't call any functions that take a writer lock internally without causing deadlocks once the reader lock is actually enforced in the main thread, too. Take the reader lock only where it is actually needed. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20230510203601.418015-6-kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3db0c8b25c
commit
87f130bdaa
1 changed files with 2 additions and 2 deletions
|
@ -1004,8 +1004,6 @@ static void coroutine_fn test_co_delete_by_drain(void *opaque)
|
||||||
void *buffer = g_malloc(65536);
|
void *buffer = g_malloc(65536);
|
||||||
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buffer, 65536);
|
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buffer, 65536);
|
||||||
|
|
||||||
GRAPH_RDLOCK_GUARD();
|
|
||||||
|
|
||||||
/* Pretend some internal write operation from parent to child.
|
/* Pretend some internal write operation from parent to child.
|
||||||
* Important: We have to read from the child, not from the parent!
|
* Important: We have to read from the child, not from the parent!
|
||||||
* Draining works by first propagating it all up the tree to the
|
* Draining works by first propagating it all up the tree to the
|
||||||
|
@ -1014,7 +1012,9 @@ static void coroutine_fn test_co_delete_by_drain(void *opaque)
|
||||||
* everything will be drained before we go back down the tree, but
|
* everything will be drained before we go back down the tree, but
|
||||||
* we do not want that. We want to be in the middle of draining
|
* we do not want that. We want to be in the middle of draining
|
||||||
* when this following requests returns. */
|
* when this following requests returns. */
|
||||||
|
bdrv_graph_co_rdlock();
|
||||||
bdrv_co_preadv(tts->wait_child, 0, 65536, &qiov, 0);
|
bdrv_co_preadv(tts->wait_child, 0, 65536, &qiov, 0);
|
||||||
|
bdrv_graph_co_rdunlock();
|
||||||
|
|
||||||
g_assert_cmpint(bs->refcnt, ==, 1);
|
g_assert_cmpint(bs->refcnt, ==, 1);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue