void qemu_thread_create(QemuThread *thread,

                       void *(*start_routine)(void *),

                       void *arg, int mode)

{

    HANDLE hThread;



    assert(mode == QEMU_THREAD_DETACHED);



    struct QemuThreadData *data;

    qemu_thread_init();

    data = g_malloc(sizeof *data);

    data->thread = thread;

    data->start_routine = start_routine;

    data->arg = arg;



    hThread = (HANDLE) _beginthreadex(NULL, 0, win32_start_routine,

                                      data, 0, NULL);

    if (!hThread) {

        error_exit(GetLastError(), __func__);

    }

    CloseHandle(hThread);

}

void qemu_thread_create(QemuThread *thread,

                       void *(*start_routine)(void *),

                       void *arg, int mode)

{

    HANDLE hThread;



    assert(mode == QEMU_THREAD_DETACHED);



    struct QemuThreadData *data;

    qemu_thread_init();

    data = g_malloc(sizeof *data);

    data->thread = thread;

    data->start_routine = start_routine;

    data->arg = arg;



    hThread = (HANDLE) _beginthreadex(NULL, 0, win32_start_routine,

                                      data, 0, NULL);

    if (!hThread) {

        error_exit(GetLastError(), __func__);

    }

    CloseHandle(hThread);

}

    assert(mode == QEMU_THREAD_DETACHED);     data->thread = thread;                                       data, 0, NULL);
VAR_2voidVAR_2 VAR_2qemu_thread_createVAR_2(VAR_2QemuThreadVAR_2 *VAR_2VAR_0VAR_2,

                       VAR_2voidVAR_2 *(*VAR_2VAR_1VAR_2)(VAR_2voidVAR_2 *),

                       VAR_2voidVAR_2 *VAR_2argVAR_2, VAR_2intVAR_2 VAR_2modeVAR_2)

{

    VAR_2HANDLEVAR_2 VAR_2hThreadVAR_2;



    VAR_2assertVAR_2(VAR_2modeVAR_2 == VAR_2QEMU_THREAD_DETACHEDVAR_2);



    VAR_2structVAR_2 VAR_2QemuThreadDataVAR_2 *VAR_2dataVAR_2;

    VAR_2qemu_thread_initVAR_2();

    VAR_2dataVAR_2 = VAR_2g_mallocVAR_2(VAR_2sizeofVAR_2 *VAR_2dataVAR_2);

    VAR_2dataVAR_2->VAR_2VAR_0VAR_2 = VAR_2VAR_0VAR_2;

    VAR_2dataVAR_2->VAR_2VAR_1VAR_2 = VAR_2VAR_1VAR_2;

    VAR_2dataVAR_2->VAR_2argVAR_2 = VAR_2argVAR_2;



    VAR_2hThreadVAR_2 = (VAR_2HANDLEVAR_2) VAR_2_beginthreadexVAR_2(VAR_2NULLVAR_2, VAR_20VAR_2, VAR_2win32_start_routineVAR_2,

                                      VAR_2dataVAR_2, VAR_20VAR_2, VAR_2NULLVAR_2);

    VAR_2ifVAR_2 (!VAR_2hThreadVAR_2) {

        VAR_2error_exitVAR_2(VAR_2GetLastErrorVAR_2(), VAR_2__func__VAR_2);

    }

    VAR_2CloseHandleVAR_2(VAR_2hThreadVAR_2);

}

VAR_2voidVAR_2 VAR_2qemu_thread_createVAR_2(VAR_2QemuThreadVAR_2 *VAR_2VAR_0VAR_2,
VAR_2voidVAR_2 *(*VAR_2VAR_1VAR_2)(VAR_2voidVAR_2 *),
VAR_2voidVAR_2 *VAR_2argVAR_2, VAR_2intVAR_2 VAR_2modeVAR_2)
{ VAR_2HANDLEVAR_2 VAR_2hThreadVAR_2; VAR_2assertVAR_2(VAR_2modeVAR_2 == VAR_2QEMU_THREAD_DETACHEDVAR_2); VAR_2structVAR_2 VAR_2QemuThreadDataVAR_2 *VAR_2dataVAR_2; VAR_2qemu_thread_initVAR_2(); VAR_2dataVAR_2 = VAR_2g_mallocVAR_2(VAR_2sizeofVAR_2 *VAR_2dataVAR_2); VAR_2dataVAR_2->VAR_2VAR_0VAR_2 = VAR_2VAR_0VAR_2; VAR_2dataVAR_2->VAR_2VAR_1VAR_2 = VAR_2VAR_1VAR_2; VAR_2dataVAR_2->VAR_2argVAR_2 = VAR_2argVAR_2; VAR_2hThreadVAR_2 = (VAR_2HANDLEVAR_2) VAR_2_beginthreadexVAR_2(VAR_2NULLVAR_2, VAR_20VAR_2, VAR_2win32_start_routineVAR_2,
VAR_2dataVAR_2, VAR_20VAR_2, VAR_2NULLVAR_2); VAR_2ifVAR_2 (!VAR_2hThreadVAR_2) { VAR_2error_exitVAR_2(VAR_2GetLastErrorVAR_2(), VAR_2__func__VAR_2); } VAR_2CloseHandleVAR_2(VAR_2hThreadVAR_2); }