mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-03 12:44:52 -04:00
Fix stackoverflow and logcontexts from linearizer
1. make it not blow out the stack when there are more than 50 things waiting for a lock. Fixes https://github.com/matrix-org/synapse/issues/2505. 2. Make it not mess up the log contexts.
This commit is contained in:
parent
4d24becf7f
commit
4fad8efbfb
2 changed files with 46 additions and 6 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue