qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore
Date: Tue, 30 Oct 2012 19:48:58 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Oct 26, 2012 at 04:05:48PM +0200, Paolo Bonzini wrote:
> +int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
> +{
> +    int rc;
> +
> +    if (ms <= 0) {
> +        /* This is cheaper than sem_timedwait.  */
> +        rc = sem_trywait(&sem->sem);
> +        if (rc == -1 && errno == EAGAIN) {
> +            return -1;
> +        }
> +    } else {
> +        struct timeval tv;
> +        struct timespec ts;
> +        gettimeofday(&tv, NULL);
> +        ts.tv_nsec = tv.tv_usec * 1000 + (ms % 1000) * 1000000;
> +        ts.tv_sec = tv.tv_sec + ms / 1000;
> +        if (ts.tv_nsec >= 1000000000) {
> +            ts.tv_sec++;
> +            ts.tv_nsec -= 1000000000;
> +        }
> +        rc = sem_timedwait(&sem->sem, &ts);
> +        if (rc == -1 && errno == ETIMEDOUT) {
> +            return -1;
> +        }
> +    }
> +    if (rc < 0) {
> +        error_exit(errno, __func__);
> +    }

Forgot to handle EINTR?

> +    return 0;
> +}
> +
> +void qemu_sem_wait(QemuSemaphore *sem)
> +{
> +    int rc;
> +
> +    rc = sem_wait(&sem->sem);
> +    if (rc < 0) {
> +        error_exit(errno, __func__);
> +    }

EINTR



reply via email to

[Prev in Thread] Current Thread [Next in Thread]