All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "alevy@redhat.com" <alevy@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 1/4] qemu-thread: add API for joinable threads
Date: Tue, 06 Dec 2011 18:40:23 +0100	[thread overview]
Message-ID: <4EDE5387.7080503@siemens.com> (raw)
In-Reply-To: <1323191155-22549-2-git-send-email-pbonzini@redhat.com>

On 2011-12-06 18:05, Paolo Bonzini wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Split from Jan's original qemu-thread-posix.c patch.  No semantic change,
> just introduce the new API that POSIX and Win32 implementations will
> conform to.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  cpus.c                  |    6 ++++--
>  hw/ccid-card-emulated.c |    5 +++--
>  qemu-thread-posix.c     |    7 ++++---
>  qemu-thread-win32.c     |    4 +++-
>  qemu-thread.h           |    8 ++++++--
>  ui/vnc-jobs-async.c     |    2 +-
>  6 files changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/cpus.c b/cpus.c
> index ca46ec6..cbb4617 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -910,7 +910,8 @@ static void qemu_tcg_init_vcpu(void *_env)
>          env->halt_cond = g_malloc0(sizeof(QemuCond));
>          qemu_cond_init(env->halt_cond);
>          tcg_halt_cond = env->halt_cond;
> -        qemu_thread_create(env->thread, qemu_tcg_cpu_thread_fn, env);
> +        qemu_thread_create(env->thread, qemu_tcg_cpu_thread_fn, env,
> +                           QEMU_THREAD_DETACHED);
>          while (env->created == 0) {
>              qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
>          }
> @@ -926,7 +927,8 @@ static void qemu_kvm_start_vcpu(CPUState *env)
>      env->thread = g_malloc0(sizeof(QemuThread));
>      env->halt_cond = g_malloc0(sizeof(QemuCond));
>      qemu_cond_init(env->halt_cond);
> -    qemu_thread_create(env->thread, qemu_kvm_cpu_thread_fn, env);
> +    qemu_thread_create(env->thread, qemu_kvm_cpu_thread_fn, env,
> +                       QEMU_THREAD_DETACHED);
>      while (env->created == 0) {
>          qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
>      }
> diff --git a/hw/ccid-card-emulated.c b/hw/ccid-card-emulated.c
> index 092301b..9fe9db5 100644
> --- a/hw/ccid-card-emulated.c
> +++ b/hw/ccid-card-emulated.c
> @@ -541,8 +541,9 @@ static int emulated_initfn(CCIDCardState *base)
>          printf("%s: failed to initialize vcard\n", EMULATED_DEV_NAME);
>          return -1;
>      }
> -    qemu_thread_create(&thread_id, event_thread, card);
> -    qemu_thread_create(&thread_id, handle_apdu_thread, card);
> +    qemu_thread_create(&thread_id, event_thread, card, QEMU_THREAD_DETACHED);
> +    qemu_thread_create(&thread_id, handle_apdu_thread, card,
> +                       QEMU_THREAD_DETACHED);
>      return 0;
>  }
>  
> diff --git a/qemu-thread-posix.c b/qemu-thread-posix.c
> index ac3c0c9..49d3388 100644
> --- a/qemu-thread-posix.c
> +++ b/qemu-thread-posix.c
> @@ -117,13 +117,14 @@ void qemu_cond_wait(QemuCond *cond, QemuMutex *mutex)
>  
>  void qemu_thread_create(QemuThread *thread,
>                         void *(*start_routine)(void*),
> -                       void *arg)
> +                       void *arg, int mode)
>  {
> +    sigset_t set, oldset;
>      int err;
>  
> -    /* Leave signal handling to the iothread.  */
> -    sigset_t set, oldset;
> +    assert(mode == QEMU_THREAD_DETACHED);
>  
> +    /* Leave signal handling to the iothread.  */
>      sigfillset(&set);
>      pthread_sigmask(SIG_SETMASK, &set, &oldset);
>      err = pthread_create(&thread->thread, NULL, start_routine, arg);
> diff --git a/qemu-thread-win32.c b/qemu-thread-win32.c
> index db8e744..ff80e84 100644
> --- a/qemu-thread-win32.c
> +++ b/qemu-thread-win32.c
> @@ -243,10 +243,12 @@ static inline void qemu_thread_init(void)
>  
>  void qemu_thread_create(QemuThread *thread,
>                         void *(*start_routine)(void *),
> -                       void *arg)
> +                       void *arg, int mode)
>  {
>      HANDLE hThread;
>  
> +    assert(mode == QEMU_THREAD_DETACHED);
> +
>      struct QemuThreadData *data;
>      qemu_thread_init();
>      data = g_malloc(sizeof *data);
> diff --git a/qemu-thread.h b/qemu-thread.h
> index e008b60..a78a8f2 100644
> --- a/qemu-thread.h
> +++ b/qemu-thread.h
> @@ -13,6 +13,9 @@ typedef struct QemuThread QemuThread;
>  #include "qemu-thread-posix.h"
>  #endif
>  
> +#define QEMU_THREAD_JOINABLE 0
> +#define QEMU_THREAD_DETACHED 1
> +
>  void qemu_mutex_init(QemuMutex *mutex);
>  void qemu_mutex_destroy(QemuMutex *mutex);
>  void qemu_mutex_lock(QemuMutex *mutex);
> @@ -35,8 +38,9 @@ void qemu_cond_broadcast(QemuCond *cond);
>  void qemu_cond_wait(QemuCond *cond, QemuMutex *mutex);
>  
>  void qemu_thread_create(QemuThread *thread,
> -                       void *(*start_routine)(void*),
> -                       void *arg);
> +                        void *(*start_routine)(void *),
> +                        void *arg, int mode);
> +void *qemu_thread_join(QemuThread *thread);
>  void qemu_thread_get_self(QemuThread *thread);
>  int qemu_thread_is_self(QemuThread *thread);
>  void qemu_thread_exit(void *retval);
> diff --git a/ui/vnc-jobs-async.c b/ui/vnc-jobs-async.c
> index de5ea6b..9b3016c 100644
> --- a/ui/vnc-jobs-async.c
> +++ b/ui/vnc-jobs-async.c
> @@ -318,7 +318,7 @@ void vnc_start_worker_thread(void)
>          return ;
>  
>      q = vnc_queue_init();
> -    qemu_thread_create(&q->thread, vnc_worker_thread, q);
> +    qemu_thread_create(&q->thread, vnc_worker_thread, q, QEMU_THREAD_DETACHED);
>      queue = q; /* Set global queue */
>  }
>  

Acked - but I already signed it anyway.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

  reply	other threads:[~2011-12-06 17:40 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-06 17:05 [Qemu-devel] [PATCH 0/4] add qemu_thread_join, use it to fix bug in ccid Paolo Bonzini
2011-12-06 17:05 ` [Qemu-devel] [PATCH 1/4] qemu-thread: add API for joinable threads Paolo Bonzini
2011-12-06 17:40   ` Jan Kiszka [this message]
2011-12-06 17:05 ` [Qemu-devel] [PATCH 2/4] qemu-thread: implement joinable threads for POSIX Paolo Bonzini
2011-12-06 17:37   ` Jan Kiszka
2011-12-06 17:05 ` [Qemu-devel] [PATCH 3/4] qemu-thread: implement joinable threads for Win32 Paolo Bonzini
2011-12-06 17:39   ` Jan Kiszka
2011-12-06 18:10     ` Paolo Bonzini
2011-12-06 17:05 ` [Qemu-devel] [PATCH 4/4] ccid: make threads joinable Paolo Bonzini
2011-12-07 11:35   ` Alon Levy
2011-12-06 17:37 ` [Qemu-devel] [PATCH 0/4] add qemu_thread_join, use it to fix bug in ccid Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EDE5387.7080503@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=alevy@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.