diff options
author | Richard van der Hoff <github@rvanderhoff.org.uk> | 2017-10-11 17:29:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-11 17:29:32 +0100 |
commit | cc794d60e76a58c87d9054bc81749305c7e3fbf3 (patch) | |
tree | af48a2c31058820b408f8d218ca210ded8b85aab /tests/util/test_linearizer.py | |
parent | Merge pull request #2529 from matrix-org/rav/fix_transaction_failure_handling (diff) | |
parent | Fix stackoverflow and logcontexts from linearizer (diff) | |
download | synapse-cc794d60e76a58c87d9054bc81749305c7e3fbf3.tar.xz |
Merge pull request #2532 from matrix-org/rav/fix_linearizer
Fix stackoverflow and logcontexts from linearizer
Diffstat (limited to 'tests/util/test_linearizer.py')
-rw-r--r-- | tests/util/test_linearizer.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/tests/util/test_linearizer.py b/tests/util/test_linearizer.py index afcba482f9..793a88e462 100644 --- a/tests/util/test_linearizer.py +++ b/tests/util/test_linearizer.py @@ -12,8 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - - +from synapse.util import async, logcontext from tests import unittest from twisted.internet import defer @@ -38,7 +37,28 @@ class LinearizerTestCase(unittest.TestCase): with cm1: self.assertFalse(d2.called) - self.assertTrue(d2.called) - with (yield d2): pass + + def test_lots_of_queued_things(self): + # we have one slow thing, and lots of fast things queued up behind it. + # it should *not* explode the stack. + linearizer = Linearizer() + + @defer.inlineCallbacks + def func(i, sleep=False): + with logcontext.LoggingContext("func(%s)" % i) as lc: + with (yield linearizer.queue("")): + self.assertEqual( + logcontext.LoggingContext.current_context(), lc) + if sleep: + yield async.sleep(0) + + self.assertEqual( + logcontext.LoggingContext.current_context(), lc) + + func(0, sleep=True) + for i in xrange(1, 100): + func(i) + + return func(1000) |