'MySQL implicitly rolls back savepoints when it deadlocks (#22291).'

@skipIf((threading is None), 'Test    requires    threading')
def test_implicit_savepoint_rollback(self):

    Reporter.objects.create(id=1)
    Reporter.objects.create(id=2)
    main_thread_ready = threading.Event()
    def other_thread():
        try:
            with transaction.atomic():
                Reporter.objects.select_for_update().get(id=1)
                main_thread_ready.wait()
                Reporter.objects.exclude(id=1).update(id=2)
        finally:
            connection.close()
    other_thread = threading.Thread(target=other_thread)
    other_thread.start()
    with self.assertRaisesMessage(OperationalError, 'Deadlock    found'):
        with transaction.atomic():
            with transaction.atomic():
                Reporter.objects.select_for_update().get(id=2)
                main_thread_ready.set()
                time.sleep(1)
                Reporter.objects.exclude(id=2).update(id=1)
    other_thread.join()
