[ET Trac] [Einstein Toolkit] #1383: CarpetLib's prolongate_3d_rf2 contains non thread safe self-test
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Fri Jun 14 14:31:25 CDT 2013
#1383: CarpetLib's prolongate_3d_rf2 contains non thread safe self-test
----------------------+-----------------------------------------------------
Reporter: rhaas | Owner: eschnett
Type: defect | Status: new
Priority: optional | Milestone:
Component: Carpet | Version: development version
Keywords: |
----------------------+-----------------------------------------------------
the prolongate_3d_rf2 template in prolongate_3d_rf2.cc line 502ff:
{{{#!c++
template <typename T, int ORDER>
void
prolongate_3d_rf2 (T const * restrict const src,
ivect3 const & restrict srcpadext,
ivect3 const & restrict srcext,
T * restrict const dst,
ivect3 const & restrict dstpadext,
ivect3 const & restrict dstext,
ibbox3 const & restrict srcbbox,
ibbox3 const & restrict dstbbox,
ibbox3 const & restrict,
ibbox3 const & restrict regbbox,
void * extraargs)
{
assert (not extraargs);
static_assert (ORDER>=0 and ORDER % 2 == 1,
"ORDER must be non-negative and odd");
typedef typename typeprops<T>::real RT;
coeffs1d<RT,ORDER>::test();
}}}
contain a call to the self-test routine test() which is not thread safe
(since it uses a static variable without protection).
As far as I can tell one can simply remove the test from this location
since it is already explicitly triggered in the scheduled routine
CarpetLib_test_prolongate_3d_rf2 above so would not ever actually execute
anyway since the static has long been set to true by the time of the first
"real" call to the operator. Similar code might exist for the other
operators.
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1383>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list