diff options
author | Alex Bennée | 2022-10-04 13:52:21 +0200 |
---|---|---|
committer | Alex Bennée | 2022-10-06 12:53:41 +0200 |
commit | f7e15affa8e574a800180de3bde1a6462aec7241 (patch) | |
tree | c759a5deb49756097f301652837b14ffc91ef6b2 /plugins | |
parent | contrib/gitdm: add Université Grenoble Alpes (diff) | |
download | qemu-f7e15affa8e574a800180de3bde1a6462aec7241.tar.gz qemu-f7e15affa8e574a800180de3bde1a6462aec7241.tar.xz qemu-f7e15affa8e574a800180de3bde1a6462aec7241.zip |
plugins: add [pre|post]fork helpers to linux-user
Special care needs to be taken in ensuring locks are in a consistent
state across fork events. Add helpers so the plugin system can ensure
that.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Fixes: https://gitlab.com/qemu-project/qemu/-/issues/358
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Tested-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20221004115221.2174499-1-alex.bennee@linaro.org>
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/core.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/plugins/core.c b/plugins/core.c index c3ae284994..ccb770a485 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -527,6 +527,26 @@ void qemu_plugin_user_exit(void) } /* + * Helpers for *-user to ensure locks are sane across fork() events. + */ + +void qemu_plugin_user_prefork_lock(void) +{ + qemu_rec_mutex_lock(&plugin.lock); +} + +void qemu_plugin_user_postfork(bool is_child) +{ + if (is_child) { + /* should we just reset via plugin_init? */ + qemu_rec_mutex_init(&plugin.lock); + } else { + qemu_rec_mutex_unlock(&plugin.lock); + } +} + + +/* * Call this function after longjmp'ing to the main loop. It's possible that the * last instruction of a TB might have used helpers, and therefore the * "disable" instruction will never execute because it ended up as dead code. |