aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/pthread/aio_suspend.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-03 06:46:11 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-03 06:46:11 +0000
commit8ee8768079f06d1e830ff9775903b5b89affcda6 (patch)
treef052bcdc0ad87badbdbca5592e4e3633e9bd6af4 /sysdeps/pthread/aio_suspend.c
parentbf293afeca043b28fd1d07e179106f337aa9ec58 (diff)
downloadglibc-8ee8768079f06d1e830ff9775903b5b89affcda6.tar
glibc-8ee8768079f06d1e830ff9775903b5b89affcda6.tar.gz
glibc-8ee8768079f06d1e830ff9775903b5b89affcda6.tar.bz2
glibc-8ee8768079f06d1e830ff9775903b5b89affcda6.zip
Update.
2003-01-02 Ulrich Drepper <drepper@redhat.com> * sysdeps/pthread/aio_suspend.c (aio_suspend): Simplify by removing 'any' variable.
Diffstat (limited to 'sysdeps/pthread/aio_suspend.c')
-rw-r--r--sysdeps/pthread/aio_suspend.c110
1 files changed, 51 insertions, 59 deletions
diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c
index 8def01c05e..1a3ec7cc04 100644
--- a/sysdeps/pthread/aio_suspend.c
+++ b/sysdeps/pthread/aio_suspend.c
@@ -1,5 +1,5 @@
/* Suspend until termination of a requests.
- Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -31,7 +31,6 @@
#include <assert.h>
#include <errno.h>
-#include <stdbool.h>
#include <stdlib.h>
#include <sys/time.h>
@@ -50,7 +49,6 @@ aio_suspend (list, nent, timeout)
int cnt;
int result = 0;
int dummy;
- bool any = false;
/* Request the mutex. */
pthread_mutex_lock (&__aio_requests_mutex);
@@ -72,7 +70,6 @@ aio_suspend (list, nent, timeout)
waitlist[cnt].sigevp = NULL;
waitlist[cnt].caller_pid = 0; /* Not needed. */
requestlist[cnt]->waiting = &waitlist[cnt];
- any = true;
}
else
/* We will never suspend. */
@@ -83,9 +80,9 @@ aio_suspend (list, nent, timeout)
break;
}
- /* If there is no finished request wait for it. In any case we have
- to dequeue the requests if we enqueued them. */
- if (any)
+
+ /* Only if none of the entries is NULL or finished to be wait. */
+ if (cnt == nent)
{
int oldstate;
@@ -94,70 +91,65 @@ aio_suspend (list, nent, timeout)
which we must remove. So defer cancelation for now. */
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate);
- /* Only if none of the entries is NULL or finished to be wait. */
- if (cnt == nent)
+ if (timeout == NULL)
+ result = pthread_cond_wait (&cond, &__aio_requests_mutex);
+ else
{
- if (timeout == NULL)
- result = pthread_cond_wait (&cond, &__aio_requests_mutex);
- else
+ /* We have to convert the relative timeout value into an
+ absolute time value with pthread_cond_timedwait expects. */
+ struct timeval now;
+ struct timespec abstime;
+
+ __gettimeofday (&now, NULL);
+ abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000;
+ abstime.tv_sec = timeout->tv_sec + now.tv_sec;
+ if (abstime.tv_nsec >= 1000000000)
{
- /* We have to convert the relative timeout value into an
- absolute time value with pthread_cond_timedwait expects. */
- struct timeval now;
- struct timespec abstime;
-
- __gettimeofday (&now, NULL);
- abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000;
- abstime.tv_sec = timeout->tv_sec + now.tv_sec;
- if (abstime.tv_nsec >= 1000000000)
- {
- abstime.tv_nsec -= 1000000000;
- abstime.tv_sec += 1;
- }
-
- result = pthread_cond_timedwait (&cond, &__aio_requests_mutex,
- &abstime);
+ abstime.tv_nsec -= 1000000000;
+ abstime.tv_sec += 1;
}
+
+ result = pthread_cond_timedwait (&cond, &__aio_requests_mutex,
+ &abstime);
}
- /* Now remove the entry in the waiting list for all requests
- which didn't terminate. */
- while (cnt-- > 0)
- if (list[cnt] != NULL && list[cnt]->__error_code == EINPROGRESS)
- {
- struct waitlist **listp;
+ /* Now it's time to restore the cancellation state. */
+ pthread_setcancelstate (oldstate, NULL);
+ }
- assert (requestlist[cnt] != NULL);
+ /* Now remove the entry in the waiting list for all requests
+ which didn't terminate. */
+ while (cnt-- > 0)
+ if (list[cnt] != NULL && list[cnt]->__error_code == EINPROGRESS)
+ {
+ struct waitlist **listp;
- /* There is the chance that we cannot find our entry anymore.
- This could happen if the request terminated and restarted
- again. */
- listp = &requestlist[cnt]->waiting;
- while (*listp != NULL && *listp != &waitlist[cnt])
- listp = &(*listp)->next;
+ assert (requestlist[cnt] != NULL);
- if (*listp != NULL)
- *listp = (*listp)->next;
- }
+ /* There is the chance that we cannot find our entry anymore. This
+ could happen if the request terminated and restarted again. */
+ listp = &requestlist[cnt]->waiting;
+ while (*listp != NULL && *listp != &waitlist[cnt])
+ listp = &(*listp)->next;
- /* Now it's time to restore the cancelation state. */
- pthread_setcancelstate (oldstate, NULL);
+ if (*listp != NULL)
+ *listp = (*listp)->next;
+ }
- /* Release the conditional variable. */
- if (__builtin_expect (pthread_cond_destroy (&cond) != 0, 0))
- /* This must never happen. */
- abort ();
+ /* Release the conditional variable. */
+ if (__builtin_expect (pthread_cond_destroy (&cond) != 0, 0))
+ /* This must never happen. */
+ abort ();
- if (result != 0)
- {
- /* An error occurred. Possibly it's EINTR. We have to translate
- the timeout error report of `pthread_cond_timedwait' to the
- form expected from `aio_suspend'. */
- if (result == ETIMEDOUT)
- __set_errno (EAGAIN);
+ if (result != 0)
+ {
+ /* An error occurred. Possibly it's EINTR. We have to translate
+ the timeout error report of `pthread_cond_timedwait' to the
+ form expected from `aio_suspend'. */
+ if (result == ETIMEDOUT)
+ __set_errno (EAGAIN);
- result = -1;
- }
+ result = -1;
}
/* Release the mutex. */