This stackoverflow thread seems to indicate that it isn't - I'll see if I 
can set something up where I have one python process continuously invoking 
copy_file on libcxx.a while another process tries to build an emscripten 
target.

http://stackoverflow.com/questions/20873723/is-pythons-shutil-copyfile-atomic

On Wednesday, January 27, 2016 at 10:26:51 AM UTC-8, arnab choudhury wrote:
>
> Thanks Alon - that makes sense. The part that got me thinking along this 
> path was - is shutil.copy_file atomic? Consider the following code from 
> cache.py:
>
>   # Request a cached file. If it isn't in the cache, it will be created 
> with
>   # the given creator function
>   def get(self, shortname, creator, extension='.bc', what=None):
>     if not shortname.endswith(extension): shortname += extension
>     cachename = os.path.join(self.dirname, shortname)
>     if os.path.exists(cachename):
>       return cachename
>     if what is None:
>       if shortname.endswith(('.bc', '.so', '.a')): what = 'system library'
>       else: what = 'system asset'
>     message = 'generating ' + what + ': ' + shortname + '...'
>     logging.warn(message)
>     self.ensure()
>     temp = creator()
>     if temp != cachename:
>       shutil.copyfile(temp, cachename)
>     logging.warn(' '*len(message) + 'ok')
>     return cachename
>
> If both target A and B were to cross the first part of the function and 
> target A then copied the file to the cache and proceeded to use it, could 
> there be a case where target B invoked shutil.copyfile while A was using 
> libcxx.a? 
>
> On Wednesday, January 27, 2016 at 10:17:00 AM UTC-8, Alon Zakai wrote:
>>
>> That is a possible issue in the sense that we don't have a global system 
>> lock for creating system libs (because it's hard to do cross-platform - if 
>> someone knows a good way, let me know!). If you start multiple emccs, they 
>> will all build libc++. A solution to that is to use embuilder.py, and to 
>> build libc++ and other things you need before starting all the threads.
>>
>> However, this still shouldn't be able to cause the problem you see - 
>> building libc++ should be deterministic, so all the threads building it in 
>> parallel should end up with the same thing. They will overwrite each other, 
>> but with the exact same data. I believe on all modern filesystems this is 
>> atomic, so all those threads should see the same full libc++. Or, they 
>> should see no libc++ if the OS can't do an atomic replace (i.e. if it 
>> deletes first then writes), but that should result in a link error, not in 
>> missing symbols.
>>
>>
>> On Wed, Jan 27, 2016 at 9:54 AM, arnab choudhury <achou...@gmail.com> 
>> wrote:
>>
>>> I think I have identified what may be the problem, although since I 
>>> can't repro on demand, its only a hunch. The C++ codebase that I am working 
>>> on has multiple Emscripten CMake targets. The symbols below all come from 
>>> libcxx.a which is generated if it is not present in the Emscripten cache 
>>> (set via EM_CACHE). The CMake generator generates a ninja file which will 
>>> then schedule all the targets. Since my build machine always starts from a 
>>> clean state, all targets will simultaneously attempt to populate the 
>>> Emscripten cache with libcxx.a as they will all initially detect that it is 
>>> not present. If target A were writing libcxx.a to the cache when target B 
>>> was trying to read from it, we could see issues like this.
>>>
>>> So, I think the underlying problem is that building multiple CMake 
>>> targets simultaneously with Emscripten may be a problem if there is a 
>>> common cache - is this a known issue? Note that since I haven't root 
>>> caused, this is only a hunch - but from looking at cache.py, in theory at 
>>> least, it feels like there could be a problem.
>>>
>>> On Tuesday, January 26, 2016 at 6:15:53 PM UTC-8, Alon Zakai wrote:
>>>>
>>>> That's very strange, all of that should be fully deterministic.
>>>>
>>>> Perhaps build with EMCC_DEBUG=1 in the env, then if you see the error, 
>>>> that log could help.
>>>>
>>>> On Tue, Jan 26, 2016 at 6:02 PM, arnab choudhury <achou...@gmail.com> 
>>>> wrote:
>>>>
>>>>> Unfortunately I don't have a repro :-/. About one in 150 builds of a 
>>>>> large C++ codebase produces this error. Digging in more, it looks like on 
>>>>> the builds that fail, we are missing libcxx symbols. These seem to be 
>>>>> libcxx symbols which I think get included by default while building C++ 
>>>>> projects with Emscripten.
>>>>>
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_jjRKS4_
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__119__shared_weak_count10__add_weakEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc
>>>>> warning: unresolved symbol: _ZNSt3__119__shared_weak_countD2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4syncEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPci
>>>>> warning: unresolved symbol: _ZNSt3__18ios_base5clearEj
>>>>> warning: unresolved symbol: _ZNSt3__119__shared_weak_count4lockEv
>>>>> warning: unresolved symbol: 
>>>>> _ZTv0_n12_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE10do_unshiftER11__mbstate_tPcS4_RS4_
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6setbufEPci
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE13do_max_lengthEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__vector_base_commonILb1EE20__throw_out_of_rangeEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEs
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEt
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEx
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEb
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEf
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__119__shared_weak_count16__release_sharedEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEj
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEi
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEl
>>>>> warning: unresolved symbol: 
>>>>> _ZTv0_n12_NSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev
>>>>> warning: unresolved symbol: _ZNSt11logic_errorC2EPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj
>>>>> warning: unresolved symbol: _ZNSt3__16locale5facet16__on_zero_sharedEv
>>>>> warning: unresolved symbol: _ZNSt3__112__next_primeEj
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__19basic_iosIcNS_11char_traitsIcEEED2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPNS_15basic_streambufIcS2_EE
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcj
>>>>> warning: unresolved symbol: _ZNSt3__17codecvtIDsc11__mbstate_tED2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5uflowEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE9do_lengthER11__mbstate_tPKcS5_j
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj
>>>>> warning: unresolved symbol: _ZNSt13runtime_errorC1EPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZTv0_n12_NSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE11do_encodingEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEy
>>>>> warning: unresolved symbol: _ZNSt3__19to_stringEi
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcjj
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPKv
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE16do_always_noconvEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEjc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj
>>>>> warning: unresolved symbol: _ZNSt13runtime_errorC2EPKc
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt11logic_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__119__shared_weak_count14__release_weakEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__120__codecvt_utf8_utf16IDsE5do_inER11__mbstate_tPKcS5_RS5_PDsS7_RS7_
>>>>> warning: unresolved symbol: _ZNKSt3__18ios_base6getlocEv
>>>>> warning: unresolved symbol: _ZNSt3__112bad_weak_ptrD1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKci
>>>>> warning: unresolved symbol: _ZNKSt3__16locale9use_facetERNS0_2idE
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
>>>>> warning: unresolved symbol: _ZNSt3__18ios_base4initEPv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj
>>>>> warning: unresolved symbol: _ZNSt3__16localeD1Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED2Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZTv0_n12_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__119__shared_weak_count12__add_sharedEv
>>>>> warning: unresolved symbol: 
>>>>> _ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info
>>>>> warning: unresolved symbol: 
>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9showmanycEv
>>>>> warning: unresolved symbol: _ZNSt3__13cinE
>>>>> warning: unresolved symbol: _ZNSt3__14cerrE
>>>>> warning: unresolved symbol: _ZNSt3__14coutE
>>>>> warning: unresolved symbol: _ZNSt3__15ctypeIcE2idE
>>>>> warning: unresolved symbol: _ZTINSt3__112bad_weak_ptrE
>>>>> warning: unresolved symbol: 
>>>>> _ZTINSt3__113basic_istreamIcNS_11char_traitsIcEEEE
>>>>> warning: unresolved symbol: 
>>>>> _ZTINSt3__113basic_ostreamIcNS_11char_traitsIcEEEE
>>>>> warning: unresolved symbol: 
>>>>> _ZTINSt3__115basic_streambufIcNS_11char_traitsIcEEEE
>>>>> warning: unresolved symbol: _ZTINSt3__119__shared_weak_countE
>>>>> warning: unresolved symbol: _ZTINSt3__120__codecvt_utf8_utf16IDsEE
>>>>> warning: unresolved symbol: _ZTVNSt3__112bad_weak_ptrE
>>>>>
>>>>> On Thursday, January 21, 2016 at 2:22:20 PM UTC-8, Alon Zakai wrote:
>>>>>>
>>>>>> That's very strange, and not a known issue. Do you have a testcase 
>>>>>> showing the problem?
>>>>>>
>>>>>> On Thu, Jan 21, 2016 at 12:17 PM, arnab choudhury <achou...@gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Another thing to note is that only optimized builds are showing this 
>>>>>>> behavior - we are not seeing this on debug (unoptimized) builds.
>>>>>>>
>>>>>>>
>>>>>>> On Thursday, January 21, 2016 at 12:04:56 PM UTC-8, arnab choudhury 
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hey guys
>>>>>>>>
>>>>>>>> After updating my local fork of Emscripten to 1.35.17, I am seeing 
>>>>>>>> sporadic runtime failures where Emscripten identifies certain STL 
>>>>>>>> functions 
>>>>>>>> as missing:
>>>>>>>>
>>>>>>>> Some examples of functions:
>>>>>>>> _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj
>>>>>>>>  
>>>>>>>> (Demangled: std::__1::basic_string<char, std::__1::char_traits<char>, 
>>>>>>>> std::__1::allocator<char> >::__init(char const*, unsigned int)
>>>>>>>> _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2Ev (Demangled: 
>>>>>>>> std::__1::basic_streambuf<char, std::__1::char_traits<char> 
>>>>>>>> >::basic_streambuf())
>>>>>>>>
>>>>>>>> Is this a known issue with 1.35.17? I wouldn't expect these 
>>>>>>>> functions to be optimized away. Digging in a bit more, it looks like 
>>>>>>>> jsifier will identify these functions as missing when adding library 
>>>>>>>> functions to the ASM JS preamble code. 
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Arnab
>>>>>>>>
>>>>>>> -- 
>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>> Groups "emscripten-discuss" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>> send an email to emscripten-discuss+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "emscripten-discuss" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to emscripten-discuss+unsubscr...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "emscripten-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to emscripten-discuss+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to emscripten-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to