aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/adaint.c
diff options
context:
space:
mode:
authorPascal Obry <obry@adacore.com>2008-08-22 15:26:38 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-08-22 15:26:38 +0200
commit23922a2f6acfcbdf13363db7ddf4fcf3aa4dfc79 (patch)
treee45e53c192bef24215b3765eb5faa3c4a5d7f146 /gcc/ada/adaint.c
parentfb34edfafac9e1b807e5ee6b93624e262b28aa78 (diff)
downloadgcc-23922a2f6acfcbdf13363db7ddf4fcf3aa4dfc79.zip
gcc-23922a2f6acfcbdf13363db7ddf4fcf3aa4dfc79.tar.gz
gcc-23922a2f6acfcbdf13363db7ddf4fcf3aa4dfc79.tar.bz2
adaint.c: Fix possible race condition on win32_wait().
2008-08-22 Pascal Obry <obry@adacore.com> * adaint.c: Fix possible race condition on win32_wait(). From-SVN: r139466
Diffstat (limited to 'gcc/ada/adaint.c')
-rw-r--r--gcc/ada/adaint.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 48abb3e..0971a02 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -2266,6 +2266,7 @@ win32_wait (int *status)
DWORD res;
int k;
Process_List *pl;
+ int hl_len;
if (plist_length == 0)
{
@@ -2273,12 +2274,14 @@ win32_wait (int *status)
return -1;
}
- hl = (HANDLE *) xmalloc (sizeof (HANDLE) * plist_length);
-
k = 0;
plist_enter();
+ hl_len = plist_length;
+
/* -------------------- critical section -------------------- */
+ hl = (HANDLE *) xmalloc (sizeof (HANDLE) * hl_len);
+
pl = PLIST;
while (pl)
{
@@ -2289,7 +2292,7 @@ win32_wait (int *status)
plist_leave();
- res = WaitForMultipleObjects (plist_length, hl, FALSE, INFINITE);
+ res = WaitForMultipleObjects (hl_len, hl, FALSE, INFINITE);
h = hl[res - WAIT_OBJECT_0];
free (hl);