void qemu_thread_create(QemuThread *thread, const char *name,

                       void *(*start_routine)(void*),

                       void *arg, int mode)

{

    sigset_t set, oldset;

    int err;

    pthread_attr_t attr;



    err = pthread_attr_init(&attr);

    if (err) {

        error_exit(err, __func__);

    }

    if (mode == QEMU_THREAD_DETACHED) {

        err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

        if (err) {

            error_exit(err, __func__);

        }

    }



    /* Leave signal handling to the iothread.  */

    sigfillset(&set);

    pthread_sigmask(SIG_SETMASK, &set, &oldset);

    err = pthread_create(&thread->thread, &attr, start_routine, arg);

    if (err)

        error_exit(err, __func__);



    if (name_threads) {

        qemu_thread_set_name(thread, name);

    }



    pthread_sigmask(SIG_SETMASK, &oldset, NULL);



    pthread_attr_destroy(&attr);

}

void qemu_thread_create(QemuThread *thread, const char *name,

                       void *(*start_routine)(void*),

                       void *arg, int mode)

{

    sigset_t set, oldset;

    int err;

    pthread_attr_t attr;



    err = pthread_attr_init(&attr);

    if (err) {

        error_exit(err, __func__);

    }

    if (mode == QEMU_THREAD_DETACHED) {

        err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

        if (err) {

            error_exit(err, __func__);

        }

    }



    

    sigfillset(&set);

    pthread_sigmask(SIG_SETMASK, &set, &oldset);

    err = pthread_create(&thread->thread, &attr, start_routine, arg);

    if (err)

        error_exit(err, __func__);



    if (name_threads) {

        qemu_thread_set_name(thread, name);

    }



    pthread_sigmask(SIG_SETMASK, &oldset, NULL);



    pthread_attr_destroy(&attr);

}

    if (mode == QEMU_THREAD_DETACHED) {         err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);         if (err) {             error_exit(err, __func__);
VAR_3voidVAR_3 VAR_3qemu_thread_createVAR_3(VAR_3QemuThreadVAR_3 *VAR_3VAR_0VAR_3, VAR_3constVAR_3 VAR_3charVAR_3 *VAR_3VAR_1VAR_3,

                       VAR_3voidVAR_3 *(*VAR_3VAR_2VAR_3)(VAR_3voidVAR_3*),

                       VAR_3voidVAR_3 *VAR_3argVAR_3, VAR_3intVAR_3 VAR_3modeVAR_3)

{

    VAR_3sigset_tVAR_3 VAR_3setVAR_3, VAR_3oldsetVAR_3;

    VAR_3intVAR_3 VAR_3errVAR_3;

    VAR_3pthread_attr_tVAR_3 VAR_3attrVAR_3;



    VAR_3errVAR_3 = VAR_3pthread_attr_initVAR_3(&VAR_3attrVAR_3);

    VAR_3ifVAR_3 (VAR_3errVAR_3) {

        VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3);

    }

    VAR_3ifVAR_3 (VAR_3modeVAR_3 == VAR_3QEMU_THREAD_DETACHEDVAR_3) {

        VAR_3errVAR_3 = VAR_3pthread_attr_setdetachstateVAR_3(&VAR_3attrVAR_3, VAR_3PTHREAD_CREATE_DETACHEDVAR_3);

        VAR_3ifVAR_3 (VAR_3errVAR_3) {

            VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3);

        }

    }



    

    VAR_3sigfillsetVAR_3(&VAR_3setVAR_3);

    VAR_3pthread_sigmaskVAR_3(VAR_3SIG_SETMASKVAR_3, &VAR_3setVAR_3, &VAR_3oldsetVAR_3);

    VAR_3errVAR_3 = VAR_3pthread_createVAR_3(&VAR_3VAR_0VAR_3->VAR_3VAR_0VAR_3, &VAR_3attrVAR_3, VAR_3VAR_2VAR_3, VAR_3argVAR_3);

    VAR_3ifVAR_3 (VAR_3errVAR_3)

        VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3);



    VAR_3ifVAR_3 (VAR_3name_threadsVAR_3) {

        VAR_3qemu_thread_set_nameVAR_3(VAR_3VAR_0VAR_3, VAR_3VAR_1VAR_3);

    }



    VAR_3pthread_sigmaskVAR_3(VAR_3SIG_SETMASKVAR_3, &VAR_3oldsetVAR_3, VAR_3NULLVAR_3);



    VAR_3pthread_attr_destroyVAR_3(&VAR_3attrVAR_3);

}

VAR_3voidVAR_3 VAR_3qemu_thread_createVAR_3(VAR_3QemuThreadVAR_3 *VAR_3VAR_0VAR_3, VAR_3constVAR_3 VAR_3charVAR_3 *VAR_3VAR_1VAR_3,
VAR_3voidVAR_3 *(*VAR_3VAR_2VAR_3)(VAR_3voidVAR_3*),
VAR_3voidVAR_3 *VAR_3argVAR_3, VAR_3intVAR_3 VAR_3modeVAR_3)
{ VAR_3sigset_tVAR_3 VAR_3setVAR_3, VAR_3oldsetVAR_3; VAR_3intVAR_3 VAR_3errVAR_3; VAR_3pthread_attr_tVAR_3 VAR_3attrVAR_3; VAR_3errVAR_3 = VAR_3pthread_attr_initVAR_3(&VAR_3attrVAR_3); VAR_3ifVAR_3 (VAR_3errVAR_3) { VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3); } VAR_3ifVAR_3 (VAR_3modeVAR_3 == VAR_3QEMU_THREAD_DETACHEDVAR_3) { VAR_3errVAR_3 = VAR_3pthread_attr_setdetachstateVAR_3(&VAR_3attrVAR_3, VAR_3PTHREAD_CREATE_DETACHEDVAR_3); VAR_3ifVAR_3 (VAR_3errVAR_3) { VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3); } } VAR_3sigfillsetVAR_3(&VAR_3setVAR_3); VAR_3pthread_sigmaskVAR_3(VAR_3SIG_SETMASKVAR_3, &VAR_3setVAR_3, &VAR_3oldsetVAR_3); VAR_3errVAR_3 = VAR_3pthread_createVAR_3(&VAR_3VAR_0VAR_3->VAR_3VAR_0VAR_3, &VAR_3attrVAR_3, VAR_3VAR_2VAR_3, VAR_3argVAR_3); VAR_3ifVAR_3 (VAR_3errVAR_3)
VAR_3error_exitVAR_3(VAR_3errVAR_3, VAR_3__func__VAR_3); VAR_3ifVAR_3 (VAR_3name_threadsVAR_3) { VAR_3qemu_thread_set_nameVAR_3(VAR_3VAR_0VAR_3, VAR_3VAR_1VAR_3); } VAR_3pthread_sigmaskVAR_3(VAR_3SIG_SETMASKVAR_3, &VAR_3oldsetVAR_3, VAR_3NULLVAR_3); VAR_3pthread_attr_destroyVAR_3(&VAR_3attrVAR_3); }