Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • L linux
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Kirill Smelkov
  • linux
  • Repository
You need to sign in or sign up before continuing.
  • linux
  • ..
  • py
  • utils.py
Find file BlameHistoryPermalink
  • Jakub Kicinski's avatar
    selftests: drv-net: add ability to schedule cleanup with defer() · 8510801a
    Jakub Kicinski authored Jun 27, 2024
    This implements what I was describing in [1]. When writing a test
    author can schedule cleanup / undo actions right after the creation
    completes, eg:
    
      cmd("touch /tmp/file")
      defer(cmd, "rm /tmp/file")
    
    defer() takes the function name as first argument, and the rest are
    arguments for that function. defer()red functions are called in
    inverse order after test exits. It's also possible to capture them
    and execute earlier (in which case they get automatically de-queued).
    
      undo = defer(cmd, "rm /tmp/file")
      # ... some unsafe code ...
      undo.exec()
    
    As a nice safety all exceptions from defer()ed calls are captured,
    printed, and ignored (they do make the test fail, however).
    This addresses the common problem of exceptions in cleanup paths
    often being unhandled, leading to potential leaks.
    
    There is a global action queue, flushed by ksft_run(). We could support
    function level defers too, I guess, but there's no immediate need..
    
    Link: https://lore.kernel.org/all/877cedb2ki.fsf@nvidia.com/
    
     # [1]
    Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20240627185502.3069139-3-kuba@kernel.org
    
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    8510801a
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7