Eric Blake <ebl...@redhat.com> writes: > On 12/18/18 12:22 PM, Markus Armbruster wrote: >> The qapi_event_send_FOO() functions emit events like this: >> >> QMPEventFuncEmit emit; >> >> emit = qmp_event_get_func_emit(); >> if (!emit) { >> return; >> } >> > >> emit(QAPI_EVENT_FOO, qmp); >> > >> More seriously: how does this work even now? qemu-system-FOO wants >> QAPIEvent, and passes a function taking that to >> qmp_event_set_func_emit(). test-qmp-event wants test_QAPIEvent, and >> passes a function taking that to qmp_event_set_func_emit(). >> >> I works by type trickery, of course: > > s/I/It/
Of course. >> >> typedef void (*QMPEventFuncEmit)(unsigned event, QDict *dict); >> >> void qmp_event_set_func_emit(QMPEventFuncEmit emit); >> >> QMPEventFuncEmit qmp_event_get_func_emit(void); >> >> We use unsigned instead of the enumeration type. Relies on both >> enumerations boiling down to unsigned, which happens to be true for >> the compilers we use. >> >> Clean this up as follows: >> >> * Generate qapi_event_send_FOO() that call PREFIX_qapi_event_emit() >> instead of the value of qmp_event_set_func_emit(). >> >> * Generate a prototype for PREFIX_qapi_event_emit() into >> qapi-events.h. >> >> * PREFIX_ is empty for qapi/qapi-schema.json, and test_ for >> tests/qapi-schema/qapi-schema-test.json. It's qga_ for >> qga/qapi-schema.json, and doc-good- for >> tests/qapi-schema/doc-good-qapi-doc.texi, but those don't define any >> events. > > Wait - PREFIX is qga_ or doc_good_... Yes. >> * Add a qapi_event_emit() that does nothing to stubs/monitor.c. This >> takes care of all other programs that link code emitting QMP events. > > ...but the stub function is defined without a prefix? It's defined with a prefix, except in the commit message ;) Will fix, thanks!