Annotation of qemu/qemu-coroutine-sleep.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * QEMU coroutine sleep
                      3:  *
                      4:  * Copyright IBM, Corp. 2011
                      5:  *
                      6:  * Authors:
                      7:  *  Stefan Hajnoczi    <stefanha@linux.vnet.ibm.com>
                      8:  *
                      9:  * This work is licensed under the terms of the GNU LGPL, version 2 or later.
                     10:  * See the COPYING.LIB file in the top-level directory.
                     11:  *
                     12:  */
                     13: 
                     14: #include "qemu-coroutine.h"
                     15: #include "qemu-timer.h"
                     16: 
                     17: typedef struct CoSleepCB {
                     18:     QEMUTimer *ts;
                     19:     Coroutine *co;
                     20: } CoSleepCB;
                     21: 
                     22: static void co_sleep_cb(void *opaque)
                     23: {
                     24:     CoSleepCB *sleep_cb = opaque;
                     25: 
                     26:     qemu_coroutine_enter(sleep_cb->co, NULL);
                     27: }
                     28: 
                     29: void coroutine_fn co_sleep_ns(QEMUClock *clock, int64_t ns)
                     30: {
                     31:     CoSleepCB sleep_cb = {
                     32:         .co = qemu_coroutine_self(),
                     33:     };
                     34:     sleep_cb.ts = qemu_new_timer(clock, SCALE_NS, co_sleep_cb, &sleep_cb);
                     35:     qemu_mod_timer(sleep_cb.ts, qemu_get_clock_ns(clock) + ns);
                     36:     qemu_coroutine_yield();
                     37:     qemu_del_timer(sleep_cb.ts);
                     38:     qemu_free_timer(sleep_cb.ts);
                     39: }

unix.superglobalmegacorp.com