[Openmp-commits] [openmp] r292349 - Fix memory error in case of reinit using kmp_set_defaults() for lock code.
Hans Wennborg via Openmp-commits
openmp-commits at lists.llvm.org
Mon Jan 23 10:00:31 PST 2017
Thanks!
On Thu, Jan 19, 2017 at 3:04 PM, Peyton, Jonathan L
<jonathan.l.peyton at intel.com> wrote:
> Seems we are all in agreement. I will merge both r292348 and 292349 into release_40 branch.
>
> -- Johnny
>
> -----Original Message-----
> From: Churbanov, Andrey
> Sent: Thursday, January 19, 2017 12:45 PM
> To: Hans Wennborg <hans at chromium.org>; Hahnfeld, Jonas <Hahnfeld at itc.rwth-aachen.de>
> Cc: Peyton, Jonathan L <jonathan.l.peyton at intel.com>; openmp-commits at lists.llvm.org
> Subject: RE: [Openmp-commits] [openmp] r292349 - Fix memory error in case of reinit using kmp_set_defaults() for lock code.
>
> I support merging this one.
>
> - Andrey
>
> -----Original Message-----
> From: hwennborg at google.com [mailto:hwennborg at google.com] On Behalf Of Hans Wennborg
> Sent: Thursday, January 19, 2017 9:40 PM
> To: Hahnfeld, Jonas <Hahnfeld at itc.rwth-aachen.de>
> Cc: Peyton, Jonathan L <jonathan.l.peyton at intel.com>; openmp-commits at lists.llvm.org; Churbanov, Andrey <Andrey.Churbanov at intel.com>
> Subject: Re: [Openmp-commits] [openmp] r292349 - Fix memory error in case of reinit using kmp_set_defaults() for lock code.
>
> Sounds reasonable to me. Jonathan, what do you think?
>
> On Wed, Jan 18, 2017 at 12:57 AM, Hahnfeld, Jonas <Hahnfeld at itc.rwth-aachen.de> wrote:
>> Is this one a candidate for release_40?
>>
>> Thanks,
>> Jonas
>>
>>> -----Original Message-----
>>> From: Openmp-commits [mailto:openmp-commits-bounces at lists.llvm.org]
>>> On Behalf Of Jonathan Peyton via Openmp-commits
>>> Sent: Wednesday, January 18, 2017 8:02 AM
>>> To: openmp-commits at lists.llvm.org
>>> Subject: [Openmp-commits] [openmp] r292349 - Fix memory error in case
>>> of reinit using kmp_set_defaults() for lock code.
>>>
>>> Author: jlpeyton
>>> Date: Wed Jan 18 01:02:21 2017
>>> New Revision: 292349
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=292349&view=rev
>>> Log:
>>> Fix memory error in case of reinit using kmp_set_defaults() for lock code.
>>>
>>> The lock tables were being reallocated if kmp_set_defaults() was called.
>>> In the env_init code it says that the user should be able to switch
>>> between different KMP_CONSISTENCY_CHECK values which is what this
>>> change enables.
>>>
>>> Added:
>>> openmp/trunk/runtime/test/api/kmp_set_defaults_lock_bug.c
>>> Modified:
>>> openmp/trunk/runtime/src/kmp_lock.cpp
>>>
>>> Modified: openmp/trunk/runtime/src/kmp_lock.cpp
>>> URL: http://llvm.org/viewvc/llvm-
>>> project/openmp/trunk/runtime/src/kmp_lock.cpp?rev=292349&r1=292348&
>>> r2=292349&view=diff
>>> ==========================================================
>>> ====================
>>> --- openmp/trunk/runtime/src/kmp_lock.cpp (original)
>>> +++ openmp/trunk/runtime/src/kmp_lock.cpp Wed Jan 18 01:02:21 2017
>>> @@ -3573,6 +3573,12 @@ __kmp_init_dynamic_user_locks()
>>> __kmp_indirect_unset = indirect_unset;
>>> __kmp_indirect_test = indirect_test;
>>> }
>>> + // If the user locks have already been initialized, then return.
>>> + // Allow the switch between different KMP_CONSISTENCY_CHECK
>>> values,
>>> + // but do not allocate new lock tables if they have already been
>>> + // allocated.
>>> + if (__kmp_init_user_locks)
>>> + return;
>>>
>>> // Initialize lock index table
>>> __kmp_i_lock_table.size = KMP_I_LOCK_CHUNK;
>>>
>>> Added: openmp/trunk/runtime/test/api/kmp_set_defaults_lock_bug.c
>>> URL: http://llvm.org/viewvc/llvm-
>>> project/openmp/trunk/runtime/test/api/kmp_set_defaults_lock_bug.c?rev
>>> =292349&view=auto
>>> ==========================================================
>>> ====================
>>> --- openmp/trunk/runtime/test/api/kmp_set_defaults_lock_bug.c (added)
>>> +++ openmp/trunk/runtime/test/api/kmp_set_defaults_lock_bug.c Wed
>>> Jan 18
>>> +++ 01:02:21 2017
>>> @@ -0,0 +1,53 @@
>>> +// RUN: %libomp-compile-and-run
>>> +#include <stdio.h>
>>> +#include "omp_testsuite.h"
>>> +/* The bug occurs if the lock table is reallocated after
>>> + kmp_set_defaults() is called. If the table is reallocated,
>>> + then the lock will not point to a valid lock object after the
>>> + kmp_set_defaults() call.*/
>>> +omp_lock_t lock;
>>> +
>>> +int test_kmp_set_defaults_lock_bug() {
>>> + /* checks that omp_get_num_threads is equal to the number of
>>> + threads */
>>> + int nthreads_lib;
>>> + int nthreads = 0;
>>> +
>>> + nthreads_lib = -1;
>>> +
>>> + #pragma omp parallel
>>> + {
>>> + omp_set_lock(&lock);
>>> + nthreads++;
>>> + omp_unset_lock(&lock);
>>> + #pragma omp single
>>> + {
>>> + nthreads_lib = omp_get_num_threads ();
>>> + } /* end of single */
>>> + } /* end of parallel */
>>> + kmp_set_defaults("OMP_NUM_THREADS");
>>> + #pragma omp parallel
>>> + {
>>> + omp_set_lock(&lock);
>>> + nthreads++;
>>> + omp_unset_lock(&lock);
>>> + } /* end of parallel */
>>> +
>>> + return (nthreads == 2*nthreads_lib); }
>>> +
>>> +int main()
>>> +{
>>> + int i;
>>> + int num_failed=0;
>>> + omp_init_lock(&lock);
>>> +
>>> + for(i = 0; i < REPETITIONS; i++) {
>>> + if(!test_kmp_set_defaults_lock_bug()) {
>>> + num_failed++;
>>> + }
>>> + }
>>> + omp_destroy_lock(&lock);
>>> + return num_failed;
>>> +}
>>>
>>>
>>> _______________________________________________
>>> Openmp-commits mailing list
>>> Openmp-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-commits
More information about the Openmp-commits
mailing list