mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
qapi: Add a 'coroutine' flag for commands
This patch adds a new 'coroutine' flag to QMP command definitions that tells the QMP dispatcher that the command handler is safe to be run in a coroutine. The documentation of the new flag pretends that this flag is already used as intended, which it isn't yet after this patch. We'll implement this in another patch in this series. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20201005155855.256490-9-kwolf@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
e69ee454b5
commit
04f22362f1
15 changed files with 73 additions and 14 deletions
|
@ -128,7 +128,7 @@ class QAPISchemaVisitor:
|
|||
|
||||
def visit_command(self, name, info, ifcond, features,
|
||||
arg_type, ret_type, gen, success_response, boxed,
|
||||
allow_oob, allow_preconfig):
|
||||
allow_oob, allow_preconfig, coroutine):
|
||||
pass
|
||||
|
||||
def visit_event(self, name, info, ifcond, features, arg_type, boxed):
|
||||
|
@ -713,7 +713,8 @@ class QAPISchemaCommand(QAPISchemaEntity):
|
|||
|
||||
def __init__(self, name, info, doc, ifcond, features,
|
||||
arg_type, ret_type,
|
||||
gen, success_response, boxed, allow_oob, allow_preconfig):
|
||||
gen, success_response, boxed, allow_oob, allow_preconfig,
|
||||
coroutine):
|
||||
super().__init__(name, info, doc, ifcond, features)
|
||||
assert not arg_type or isinstance(arg_type, str)
|
||||
assert not ret_type or isinstance(ret_type, str)
|
||||
|
@ -726,6 +727,7 @@ class QAPISchemaCommand(QAPISchemaEntity):
|
|||
self.boxed = boxed
|
||||
self.allow_oob = allow_oob
|
||||
self.allow_preconfig = allow_preconfig
|
||||
self.coroutine = coroutine
|
||||
|
||||
def check(self, schema):
|
||||
super().check(schema)
|
||||
|
@ -768,7 +770,8 @@ class QAPISchemaCommand(QAPISchemaEntity):
|
|||
visitor.visit_command(
|
||||
self.name, self.info, self.ifcond, self.features,
|
||||
self.arg_type, self.ret_type, self.gen, self.success_response,
|
||||
self.boxed, self.allow_oob, self.allow_preconfig)
|
||||
self.boxed, self.allow_oob, self.allow_preconfig,
|
||||
self.coroutine)
|
||||
|
||||
|
||||
class QAPISchemaEvent(QAPISchemaEntity):
|
||||
|
@ -1074,6 +1077,7 @@ class QAPISchema:
|
|||
boxed = expr.get('boxed', False)
|
||||
allow_oob = expr.get('allow-oob', False)
|
||||
allow_preconfig = expr.get('allow-preconfig', False)
|
||||
coroutine = expr.get('coroutine', False)
|
||||
ifcond = expr.get('if')
|
||||
features = self._make_features(expr.get('features'), info)
|
||||
if isinstance(data, OrderedDict):
|
||||
|
@ -1086,7 +1090,8 @@ class QAPISchema:
|
|||
self._def_entity(QAPISchemaCommand(name, info, doc, ifcond, features,
|
||||
data, rets,
|
||||
gen, success_response,
|
||||
boxed, allow_oob, allow_preconfig))
|
||||
boxed, allow_oob, allow_preconfig,
|
||||
coroutine))
|
||||
|
||||
def _def_event(self, expr, info, doc):
|
||||
name = expr['event']
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue