On 05/09/2018 11:26 AM, Kevin Wolf wrote:
Signed-off-by: Kevin Wolf <kw...@redhat.com>
---

Rather sparse on the commit message, given the other comments in this thread.

+++ b/include/qemu/job.h
@@ -58,6 +58,9 @@ typedef struct Job {
       */
      bool cancelled;
+ /** Set to true when the job has deferred work to the main loop. */
+    bool deferred_to_main_loop;
+
      /** Element of the list of jobs */
      QLIST_ENTRY(Job) job_list;
  } Job;
@@ -131,6 +134,23 @@ Job *job_get(const char *id);
   */
  int job_apply_verb(Job *job, JobVerb bv, Error **errp);
+typedef void JobDeferToMainLoopFn(Job *job, void *opaque);
+
+/**
+ * @job: The job
+ * @fn: The function to run in the main loop
+ * @opaque: The opaque value that is passed to @fn
+ *
+ * This function must be called by the main job coroutine just before it
+ * returns.  @fn is executed in the main loop with the job AioContext acquired.
+ *
+ * Block jobs must call bdrv_unref(), bdrv_close(), and anything that uses
+ * bdrv_drain_all() in the main loop.

Do we still want this block-job-specific comment in the main job.h header?

+ *
+ * The @job AioContext is held while @fn executes.
+ */
+void job_defer_to_main_loop(Job *job, JobDeferToMainLoopFn *fn, void *opaque);
+


--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Reply via email to