[Scons-users] Possible threading bug in scons

Bill Deegan bill at baddogconsulting.com
Mon Jan 18 17:31:15 EST 2016


Tom,

Any chance you can have him try to reproduce with Python 2.7.10 and SCons
2.4.1?
If a newer version will fix it, I'd rather not burn time looking at old
versions of either..

-Bill

On Mon, Jan 18, 2016 at 5:20 PM, William Blevins <wblevins001 at gmail.com>
wrote:

> I looked through TaskMaster::execute in the latest and didn't see anything
> that jumped out at me. Do you have a full stack trace or just that snippet?
>
> On Mon, Jan 18, 2016 at 9:51 PM, William Blevins <wblevins001 at gmail.com>
> wrote:
>
>> I'll take a brief look, but I am pretty busy during exam season. I have
>> ran heterogeneous SCons builds on 40-core servers without every running
>> into this, but it is still possible...
>>
>> On Mon, Jan 18, 2016 at 9:46 PM, William Blevins <wblevins001 at gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Mon, Jan 18, 2016 at 2:48 PM, Tom Tanner (BLOOMBERG/ LONDON) <
>>> ttanner2 at bloomberg.net> wrote:
>>>
>>>> Someone here has been doing a lot of parallel builds and come across
>>>> what looks like a bug though I'm not sure why:
>>>>
>>>> The problem is with this bit in Taskmaster:
>>>>
>>>> def execute(self):
>>>> """
>>>> Called to execute the task.
>>>>
>>>> This method is called from multiple threads in a parallel build,
>>>> so only do thread safe stuff here. Do thread unsafe stuff in
>>>> prepare(), executed() or failed().
>>>> """
>>>> T = self.tm.trace
>>>> if T: T.write(self.trace_message(u'Task.execute()', self.node))
>>>>
>>>> try:
>>>> cached_targets = []
>>>> for t in self.targets:
>>>> if not t.retrieve_from_cache():
>>>> break
>>>>
>>>> The t.retrieve_from_cache ends up doing this:
>>>>
>>>> File ".../SCons/Node/FS.py", line 1778, in get_csig
>>>> contents = self.get_contents()
>>>> File ".../SCons/Node/FS.py", line 1769, in get_contents
>>>> contents.append('%s %s\n' % (node.get_csig(), node.name))
>>>> File ".../SCons/Node/__init__.py", line 784, in get_csig
>>>> return self.ninfo.csig
>>>> AttributeError: 'FileNodeInfo' object has no attribute 'csig'
>>>>
>>>> which goes away if he puts a lock in Node.get_ninfo.
>>>>
>>>> Now, the only way I can think of this triggering is if he's managed to
>>>> get two rules with the same target. Is that possible? and if so how can you
>>>> detect it? I don't like the idea of having a lock in Node.get_ninfo.
>>>>
>>>
>>> Two rules with the same target generate a SCons Error at SConscript
>>> parser time.
>>>
>>>
>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> Scons-users at scons.org
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>>>
>>>
>>
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20160118/06424189/attachment-0001.html>


More information about the Scons-users mailing list