diff options
author | Pascal Obry <obry@adacore.com> | 2008-08-22 15:26:38 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2008-08-22 15:26:38 +0200 |
commit | 23922a2f6acfcbdf13363db7ddf4fcf3aa4dfc79 (patch) | |
tree | e45e53c192bef24215b3765eb5faa3c4a5d7f146 /gcc/ada/adaint.c | |
parent | fb34edfafac9e1b807e5ee6b93624e262b28aa78 (diff) | |
download | gcc-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.c | 9 |
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); |