From 86edd44f04891c0bd0fd347cba4bfc2a13d94377 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 24 Jun 2015 17:43:32 -0700 Subject: [PATCH] Use unsigned types for counters in AIO code. --- ChangeLog | 11 +++++++++++ sysdeps/nptl/aio_misc.h | 4 ++-- sysdeps/pthread/aio_misc.h | 2 +- sysdeps/pthread/aio_suspend.c | 12 ++++++------ sysdeps/pthread/lio_listio.c | 6 +++--- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb44829cd8..9d06bc14e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2015-06-24 Roland McGrath + + * sysdeps/pthread/aio_misc.h (struct waitlist): Change type of field + counterp to 'volatile unsigned int *'. + * sysdeps/pthread/aio_suspend.c [DONT_NEED_AIO_MISC_COND] + (do_aio_misc_wait): Give argument CNTR type 'unsigned int *'. + (aio_suspend): Give local variable CNTR type 'unsigned int'. + * sysdeps/pthread/lio_listio.c (lio_listio_internal): + Give local variable TOTAL type 'volatile unsigned int'. + (struct async_waitlist): Change type of field counter to 'unsigned int'. + 2015-06-24 H.J. Lu [BZ #18383] diff --git a/sysdeps/nptl/aio_misc.h b/sysdeps/nptl/aio_misc.h index fb69b0ffd1..d5d1c08d0f 100644 --- a/sysdeps/nptl/aio_misc.h +++ b/sysdeps/nptl/aio_misc.h @@ -34,8 +34,8 @@ #define AIO_MISC_WAIT(result, futex, timeout, cancel) \ do { \ - volatile int *futexaddr = &futex; \ - int oldval = futex; \ + volatile unsigned int *futexaddr = &futex; \ + unsigned int oldval = futex; \ \ if (oldval != 0) \ { \ diff --git a/sysdeps/pthread/aio_misc.h b/sysdeps/pthread/aio_misc.h index ffb0983ea8..5d3fb61efa 100644 --- a/sysdeps/pthread/aio_misc.h +++ b/sysdeps/pthread/aio_misc.h @@ -51,7 +51,7 @@ struct waitlist #endif int *result; - volatile int *counterp; + volatile unsigned int *counterp; /* The next field is used in asynchronous `lio_listio' operations. */ struct sigevent *sigevp; #ifdef BROKEN_THREAD_SIGNALS diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c index 920f18a414..641eafb1bd 100644 --- a/sysdeps/pthread/aio_suspend.c +++ b/sysdeps/pthread/aio_suspend.c @@ -94,13 +94,13 @@ cleanup (void *arg) #ifdef DONT_NEED_AIO_MISC_COND static int __attribute__ ((noinline)) -do_aio_misc_wait(int *cntr, const struct timespec *timeout) +do_aio_misc_wait (unsigned int *cntr, const struct timespec *timeout) { - int result = 0; + int result = 0; - AIO_MISC_WAIT(result, *cntr, timeout, 1); + AIO_MISC_WAIT (result, *cntr, timeout, 1); - return result; + return result; } #endif @@ -124,7 +124,7 @@ aio_suspend (list, nent, timeout) int cnt; bool any = false; int result = 0; - int cntr = 1; + unsigned int cntr = 1; /* Request the mutex. */ pthread_mutex_lock (&__aio_requests_mutex); @@ -180,7 +180,7 @@ aio_suspend (list, nent, timeout) pthread_cleanup_push (cleanup, &clparam); #ifdef DONT_NEED_AIO_MISC_COND - result = do_aio_misc_wait(&cntr, timeout); + result = do_aio_misc_wait (&cntr, timeout); #else if (timeout == NULL) result = pthread_cond_wait (&cond, &__aio_requests_mutex); diff --git a/sysdeps/pthread/lio_listio.c b/sysdeps/pthread/lio_listio.c index bfbf2217ed..ac7ce401c7 100644 --- a/sysdeps/pthread/lio_listio.c +++ b/sysdeps/pthread/lio_listio.c @@ -35,7 +35,7 @@ /* We need this special structure to handle asynchronous I/O. */ struct async_waitlist { - int counter; + unsigned int counter; struct sigevent sigev; struct waitlist list[0]; }; @@ -61,7 +61,7 @@ lio_listio_internal (int mode, struct aiocb *const list[], int nent, struct sigevent defsigev; struct requestlist *requests[nent]; int cnt; - volatile int total = 0; + volatile unsigned int total = 0; int result = 0; if (sig == NULL) @@ -83,7 +83,7 @@ lio_listio_internal (int mode, struct aiocb *const list[], int nent, requests[cnt] = __aio_enqueue_request ((aiocb_union *) list[cnt], (list[cnt]->aio_lio_opcode - | LIO_OPCODE_BASE)); + | LIO_OPCODE_BASE)); if (requests[cnt] != NULL) /* Successfully enqueued. */ -- 2.11.4.GIT