You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/mitogen
David Wilson d4c0250083 issue #532: PushFileService race.
There has always been a race in PushFileService since given a parent
asked to forward modules to two children via some intermediary:

    interm = router.local()
    c1 = router.local(via=interm)
    c2 = router.local(via=interm)

    service.propagate_to(c1, 'foo/bar.py')
    service.propagate_to(c2, 'foo/bar.py')

Two calls will be emitted to 'interm':

    PushFileService.store_and_forward(c1, 'foo/bar.py', [blob])
    PushFileService.store(c2, 'foo/bar.py')

Which will be processed in-order up to the point where service pool
threads in 'interm' are woken to process the message.

While it is guaranteed store_and_forward() will be processed first, no
guarantee existed that its assigned pool thread would wake and take
_lock first, thus it was possible for forward() to win the race, and for
a request to arrive to forward a file that had not been placed in local
cache yet.

Here we get rid of SerializedInvoker entirely, as it is partially to
blame for hiding the race: SerializedInvoker can only ensure no two
messages are processed simultaneously, it cannot ensure the messages are
processed in their intended order.

Instead, teach forward() that it may be called before
store_and_forward(), and if that is the case, to place the forward
request on to _waiters alongside any local threads blocked in get().
6 years ago
..
compat issue #508: master: minify all Mitogen/ansible_mitogen sources. 6 years ago
__init__.py Update copyright year everywhere. 6 years ago
core.py Update copyright year everywhere. 6 years ago
debug.py Update copyright year everywhere. 6 years ago
doas.py Update copyright year everywhere. 6 years ago
docker.py Update copyright year everywhere. 6 years ago
fakessh.py Update copyright year everywhere. 6 years ago
fork.py Update copyright year everywhere. 6 years ago
jail.py Update copyright year everywhere. 6 years ago
kubectl.py issue #508: master: minify all Mitogen/ansible_mitogen sources. 6 years ago
lxc.py Update copyright year everywhere. 6 years ago
lxd.py Update copyright year everywhere. 6 years ago
master.py Update copyright year everywhere. 6 years ago
minify.py issue #508: master: minify all Mitogen/ansible_mitogen sources. 6 years ago
parent.py Update copyright year everywhere. 6 years ago
profiler.py Update copyright year everywhere. 6 years ago
select.py Update copyright year everywhere. 6 years ago
service.py issue #532: PushFileService race. 6 years ago
setns.py Update copyright year everywhere. 6 years ago
ssh.py Update copyright year everywhere. 6 years ago
su.py Update copyright year everywhere. 6 years ago
sudo.py Update copyright year everywhere. 6 years ago
unix.py Update copyright year everywhere. 6 years ago
utils.py Update copyright year everywhere. 6 years ago