• Kirill Smelkov's avatar
    golang: Fix race in chan._tryrecv · c6bb9eb3
    Kirill Smelkov authored
    For buffered channel _tryrecv, on success, was unlocking ch._mu too
    early - before accessing ch._dataq with ch._dataq.append().
    
    Without the fix, newly added test breaks as e.g.
    
        golang/golang_test.py::test_chan_buf_recv_vs_tryrecv_race Exception in thread Thread-3:
        Traceback (most recent call last):
          File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
            self.run()
          File "/usr/lib/python2.7/threading.py", line 754, in run
            self.__target(*self.__args, **self.__kwargs)
          File "/home/kirr/src/tools/go/pygolang-master/golang/golang_test.py", line 317, in _
            assert (_, _rx) == (1, None), ('i%d' % i)
        AssertionError: i30
        assert (0, None) == (1, None)
          At index 0 diff: 0 != 1
          Full diff:
          - (0, None)
          ?  ^
          + (1, None)
          ?  ^
    c6bb9eb3
Name
Last commit
Last update
golang Loading commit data...
gpython Loading commit data...
.gitignore Loading commit data...
CHANGELOG.rst Loading commit data...
COPYING Loading commit data...
MANIFEST.in Loading commit data...
README.rst Loading commit data...
setup.py Loading commit data...
tox.ini Loading commit data...