Skip to content

Automatically disable pymalloc when running under valgrind #46674

Closed

Description

@jamesh
mannequin
BPO 2422
Nosy @tiran, @rbtcollins, @benjaminp, @davidmalcolm
Files
  • disable-pymalloc-on-valgrind.patch: disable-pymalloc-on-valgrind.patch
  • disable-pymalloc-on-valgrind-v3.patch: version 3
  • disable-pymalloc-on-valgrind-26.diff: patch with configure option for 2.6
  • disable-pymalloc-on-valgrind-py26.patch: Python 2.6 version of previous patch.
  • disable-pymalloc-on-valgrind-py26.patch: Python 2.6 patch (v2)
  • disable-pymalloc-on-valgrind-py27.patch: Python 2.7 patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2009-12-03.02:58:00.106>
    created_at = <Date 2008-03-19.11:11:08.362>
    labels = ['interpreter-core', 'type-feature']
    title = 'Automatically disable pymalloc when running under valgrind'
    updated_at = <Date 2009-12-03.02:58:00.096>
    user = 'https://bugs.python.org/jamesh'

    bugs.python.org fields:

    activity = <Date 2009-12-03.02:58:00.096>
    actor = 'benjamin.peterson'
    assignee = 'none'
    closed = True
    closed_date = <Date 2009-12-03.02:58:00.106>
    closer = 'benjamin.peterson'
    components = ['Interpreter Core']
    creation = <Date 2008-03-19.11:11:08.362>
    creator = 'jamesh'
    dependencies = []
    files = ['9765', '9781', '9835', '9837', '9872', '12935']
    hgrepos = []
    issue_num = 2422
    keywords = ['patch']
    message_count = 10.0
    messages = ['64052', '64139', '64255', '64390', '64393', '64575', '64837', '64840', '81124', '95923']
    nosy_count = 6.0
    nosy_names = ['jamesh', 'christian.heimes', 'rbcollins', 'benjamin.peterson', 'lauromoura', 'dmalcolm']
    pr_nums = []
    priority = 'normal'
    resolution = 'accepted'
    stage = None
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue2422'
    versions = ['Python 2.6']

    Activity

    1. jamesh commented on Mar 19, 2008

      jameshmannequin
      MannequinAuthor

      When I want to use valgrind to check for leaks in a Python program (or
      test suite), I generally want pymalloc disabled. When not running
      valgrind I generally want it enabled.

      Attached is a patch that automatically bypasses the pymalloc code when
      running under valgrind but leaves it enabled overwise.

      It is controlled by a WITH_VALGRIND #define, but I haven't updated the
      configure script to allow turning it on. I also haven't done much in
      the way of profiling to see what the overhead is when not running under
      valgrind.

    2. added
      interpreter-core(Objects, Python, Grammar, and Parser dirs)
      type-featureA feature request or enhancement
      on Mar 19, 2008
    3. jamesh commented on Mar 20, 2008

      jameshmannequin
      MannequinAuthor

      A slightly cleaned up version of the previous patch. I only needed to
      include <valgrind/valgrind.h>.

    4. tiran commented on Mar 21, 2008

      @tiran
      Member

      Please provide a patch for Python 2.6 that includes a ./configure
      --with-valgrind option. We may consider such a patch for 2.6 and 3.0 but
      definitely not for 2.5.

    5. lauromoura commented on Mar 24, 2008

      lauromouramannequin
      Mannequin

      Here's a patch with James changes to obmalloc and a --with-valgrind
      option in configure.in.

    6. jamesh commented on Mar 24, 2008

      jameshmannequin
      MannequinAuthor

      Here's the updated version of my patch (the obmalloc.c bits applied
      without conflicts to the newer source tree).

      The configure changes are a bit different to Lauro's ones, in that they
      check for the existence of the <valgrind/valgrind.h> header if Valgrind
      support was requested.

    7. jamesh commented on Mar 27, 2008

      jameshmannequin
      MannequinAuthor

      An updated version of the patch. The previous ones were missing the
      valgrind check, resulting in the pymalloc code paths being executed
      (which in turn cause unintialised read warnings from valgrind).

    8. jamesh commented on Apr 2, 2008

      jameshmannequin
      MannequinAuthor

      There are probably a few other performance optimisations that would be
      good to turn off when running under valgrind.

      A big one is the tuple cache: if there are tuple reference counting
      issues, they won't necessarily be seen by valgrind if the tuple is kept
      and reused rather than being freed.

    9. tiran commented on Apr 2, 2008

      @tiran
      Member

      James Henstridge schrieb:

      James Henstridge <james@jamesh.id.au> added the comment:

      There are probably a few other performance optimisations that would be
      good to turn off when running under valgrind.

      A big one is the tuple cache: if there are tuple reference counting
      issues, they won't necessarily be seen by valgrind if the tuple is kept
      and reused rather than being freed.

      The tuple cache can't be disabled entirely. Some parts of Python and
      some third party modules may depend on the fact that an empty tuple ()
      is a singleton in Python.

      The tuple cache could be reduced to empty tuple and some other caches
      like the list and dict cache could be disabled entirely.

      Christian

    10. jamesh commented on Feb 4, 2009

      jameshmannequin
      MannequinAuthor

      Attached is an updated version of the patch against trunk (2.7). It
      simply fixes the conflicts that have occurred since the previous patch.

    11. benjaminp commented on Dec 3, 2009

      @benjaminp
      Contributor

      Thank you. Applied in r76644.

    12. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions