1. 02 Jun, 2018 5 commits
  2. 01 Jun, 2018 11 commits
  3. 31 May, 2018 10 commits
  4. 30 May, 2018 10 commits
  5. 29 May, 2018 4 commits
    • Yury Selivanov's avatar
      bpo-32684: Fix nits in tests (GH-7225) · 6f75bae7
      Yury Selivanov authored
      6f75bae7
    • Julien Palard's avatar
      a34e424b
    • Elvis Pranskevichus's avatar
      bpo-23859: Document that asyncio.wait() does not cancel its futures (#7217) · f9aeca20
      Elvis Pranskevichus authored
      Unlike `asyncio.wait_for()`, `asyncio.wait()` does not cancel the passed
      futures when a timeout accurs.
      f9aeca20
    • Elvis Pranskevichus's avatar
      bpo-32751: Wait for task cancellation in asyncio.wait_for() (GH-7216) · e2b340ab
      Elvis Pranskevichus authored
      Currently, asyncio.wait_for(fut), upon reaching the timeout deadline,
      cancels the future and returns immediately.  This is problematic for
      when *fut* is a Task, because it will be left running for an arbitrary
      amount of time.  This behavior is iself surprising and may lead to
      related bugs such as the one described in bpo-33638:
      
          condition = asyncio.Condition()
          async with condition:
              await asyncio.wait_for(condition.wait(), timeout=0.5)
      
      Currently, instead of raising a TimeoutError, the above code will fail
      with `RuntimeError: cannot wait on un-acquired lock`, because
      `__aexit__` is reached _before_ `condition.wait()` finishes its
      cancellation and re-acquires the condition lock.
      
      To resolve this, make `wait_for` await for the task cancellation.
      The tradeoff here is that the `timeout` promise may be broken if the
      task decides to handle its cancellation in a slow way.  This represents
      a behavior change and should probably not be back-patched to 3.6 and
      earlier.
      e2b340ab