static int os_host_main_loop_wait(uint32_t timeout)

{

    GMainContext *context = g_main_context_default();

    int select_ret, g_poll_ret, ret, i;

    PollingEntry *pe;

    WaitObjects *w = &wait_objects;

    gint poll_timeout;

    static struct timeval tv0;



    /* XXX: need to suppress polling by better using win32 events */

    ret = 0;

    for (pe = first_polling_entry; pe != NULL; pe = pe->next) {

        ret |= pe->func(pe->opaque);

    }

    if (ret != 0) {

        return ret;

    }



    g_main_context_prepare(context, &max_priority);

    n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,

                                      poll_fds, ARRAY_SIZE(poll_fds));

    g_assert(n_poll_fds <= ARRAY_SIZE(poll_fds));



    for (i = 0; i < w->num; i++) {

        poll_fds[n_poll_fds + i].fd = (DWORD_PTR)w->events[i];

        poll_fds[n_poll_fds + i].events = G_IO_IN;

    }



    if (poll_timeout < 0 || timeout < poll_timeout) {

        poll_timeout = timeout;

    }



    qemu_mutex_unlock_iothread();

    g_poll_ret = g_poll(poll_fds, n_poll_fds + w->num, poll_timeout);

    qemu_mutex_lock_iothread();

    if (g_poll_ret > 0) {

        for (i = 0; i < w->num; i++) {

            w->revents[i] = poll_fds[n_poll_fds + i].revents;

        }

        for (i = 0; i < w->num; i++) {

            if (w->revents[i] && w->func[i]) {

                w->func[i](w->opaque[i]);

            }

        }

    }



    if (g_main_context_check(context, max_priority, poll_fds, n_poll_fds)) {

        g_main_context_dispatch(context);

    }



    /* Call select after g_poll to avoid a useless iteration and therefore

     * improve socket latency.

     */



    if (nfds >= 0) {

        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);

        if (select_ret != 0) {

            timeout = 0;

        }

    }



    return select_ret || g_poll_ret;

}

static int os_host_main_loop_wait(uint32_t timeout)

{

    GMainContext *context = g_main_context_default();

    int select_ret, g_poll_ret, ret, i;

    PollingEntry *pe;

    WaitObjects *w = &wait_objects;

    gint poll_timeout;

    static struct timeval tv0;



    

    ret = 0;

    for (pe = first_polling_entry; pe != NULL; pe = pe->next) {

        ret |= pe->func(pe->opaque);

    }

    if (ret != 0) {

        return ret;

    }



    g_main_context_prepare(context, &max_priority);

    n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,

                                      poll_fds, ARRAY_SIZE(poll_fds));

    g_assert(n_poll_fds <= ARRAY_SIZE(poll_fds));



    for (i = 0; i < w->num; i++) {

        poll_fds[n_poll_fds + i].fd = (DWORD_PTR)w->events[i];

        poll_fds[n_poll_fds + i].events = G_IO_IN;

    }



    if (poll_timeout < 0 || timeout < poll_timeout) {

        poll_timeout = timeout;

    }



    qemu_mutex_unlock_iothread();

    g_poll_ret = g_poll(poll_fds, n_poll_fds + w->num, poll_timeout);

    qemu_mutex_lock_iothread();

    if (g_poll_ret > 0) {

        for (i = 0; i < w->num; i++) {

            w->revents[i] = poll_fds[n_poll_fds + i].revents;

        }

        for (i = 0; i < w->num; i++) {

            if (w->revents[i] && w->func[i]) {

                w->func[i](w->opaque[i]);

            }

        }

    }



    if (g_main_context_check(context, max_priority, poll_fds, n_poll_fds)) {

        g_main_context_dispatch(context);

    }



    







    if (nfds >= 0) {

        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);

        if (select_ret != 0) {

            timeout = 0;

        }

    }



    return select_ret || g_poll_ret;

}

    int select_ret, g_poll_ret, ret, i;
static int FUNC_0(uint32_t VAR_0)

{

    GMainContext *context = g_main_context_default();

    int VAR_1, VAR_2, VAR_3, VAR_4;

    PollingEntry *pe;

    WaitObjects *w = &wait_objects;

    gint poll_timeout;

    static struct timeval VAR_5;



    

    VAR_3 = 0;

    for (pe = first_polling_entry; pe != NULL; pe = pe->next) {

        VAR_3 |= pe->func(pe->opaque);

    }

    if (VAR_3 != 0) {

        return VAR_3;

    }



    g_main_context_prepare(context, &max_priority);

    n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,

                                      poll_fds, ARRAY_SIZE(poll_fds));

    g_assert(n_poll_fds <= ARRAY_SIZE(poll_fds));



    for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) {

        poll_fds[n_poll_fds + VAR_4].fd = (DWORD_PTR)w->events[VAR_4];

        poll_fds[n_poll_fds + VAR_4].events = G_IO_IN;

    }



    if (poll_timeout < 0 || VAR_0 < poll_timeout) {

        poll_timeout = VAR_0;

    }



    qemu_mutex_unlock_iothread();

    VAR_2 = g_poll(poll_fds, n_poll_fds + w->num, poll_timeout);

    qemu_mutex_lock_iothread();

    if (VAR_2 > 0) {

        for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) {

            w->revents[VAR_4] = poll_fds[n_poll_fds + VAR_4].revents;

        }

        for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) {

            if (w->revents[VAR_4] && w->func[VAR_4]) {

                w->func[VAR_4](w->opaque[VAR_4]);

            }

        }

    }



    if (g_main_context_check(context, max_priority, poll_fds, n_poll_fds)) {

        g_main_context_dispatch(context);

    }



    







    if (nfds >= 0) {

        VAR_1 = select(nfds + 1, &rfds, &wfds, &xfds, &VAR_5);

        if (VAR_1 != 0) {

            VAR_0 = 0;

        }

    }



    return VAR_1 || VAR_2;

}

static int FUNC_0(uint32_t VAR_0)
{ GMainContext *context = g_main_context_default(); int VAR_1, VAR_2, VAR_3, VAR_4; PollingEntry *pe; WaitObjects *w = &wait_objects; gint poll_timeout; static struct timeval VAR_5; VAR_3 = 0; for (pe = first_polling_entry; pe != NULL; pe = pe->next) { VAR_3 |= pe->func(pe->opaque); } if (VAR_3 != 0) { return VAR_3; } g_main_context_prepare(context, &max_priority); n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,
poll_fds, ARRAY_SIZE(poll_fds)); g_assert(n_poll_fds <= ARRAY_SIZE(poll_fds)); for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) { poll_fds[n_poll_fds + VAR_4].fd = (DWORD_PTR)w->events[VAR_4]; poll_fds[n_poll_fds + VAR_4].events = G_IO_IN; } if (poll_timeout < 0 || VAR_0 < poll_timeout) { poll_timeout = VAR_0; } qemu_mutex_unlock_iothread(); VAR_2 = g_poll(poll_fds, n_poll_fds + w->num, poll_timeout); qemu_mutex_lock_iothread(); if (VAR_2 > 0) { for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) { w->revents[VAR_4] = poll_fds[n_poll_fds + VAR_4].revents; } for (VAR_4 = 0; VAR_4 < w->num; VAR_4++) { if (w->revents[VAR_4] && w->func[VAR_4]) { w->func[VAR_4](w->opaque[VAR_4]); } } } if (g_main_context_check(context, max_priority, poll_fds, n_poll_fds)) { g_main_context_dispatch(context); } if (nfds >= 0) { VAR_1 = select(nfds + 1, &rfds, &wfds, &xfds, &VAR_5); if (VAR_1 != 0) { VAR_0 = 0; } } return VAR_1 || VAR_2; }