1. 21 Apr, 2000 16 commits
    • Guido van Rossum's avatar
      Patch by Charles G Waldman to avoid a sneaky memory leak in · b8a9659a
      Guido van Rossum authored
      _PyTuple_Resize().  In addition, a change suggested by Jeremy Hylton
      to limit the size of the free lists is also merged into this patch.
      
      Charles wrote initially:
      
      """
      Test Case:  run the following code:
      
      class Nothing:
          def __len__(self):
              return 5
          def __getitem__(self, i):
              if i < 3:
                  return i
              else:
                  raise IndexError, i
      
      def g(a,*b,**c):
          return
      
      for x in xrange(1000000):
          g(*Nothing())
      
      
      and watch Python's memory use go up and up.
      
      
      Diagnosis:
      
      The analysis begins with the call to PySequence_Tuple at line 1641 in
      ceval.c - the argument to g is seen to be a sequence but not a tuple,
      so it needs to be converted from an abstract sequence to a concrete
      tuple.  PySequence_Tuple starts off by creating a new tuple of length
      5 (line 1122 in abstract.c).  Then at line 1149, since only 3 elements
      were assigned, _PyTuple_Resize is called to make the 5-tuple into a
      3-tuple.  When we're all done the 3-tuple is decrefed, but rather than
      being freed it is placed on the free_tuples cache.
      
      The basic problem is that the 3-tuples are being added to the cache
      but never picked up again, since _PyTuple_Resize doesn't make use of
      the free_tuples cache.  If you are resizing a 5-tuple to a 3-tuple and
      there is already a 3-tuple in free_tuples[3], instead of using this
      tuple, _PyTuple_Resize will realloc the 5-tuple to a 3-tuple.  It
      would more efficient to use the existing 3-tuple and cache the
      5-tuple.
      
      By making _PyTuple_Resize aware of the free_tuples (just as
      PyTuple_New), we not only save a few calls to realloc, but also
      prevent this misbehavior whereby tuples are being added to the
      free_tuples list but never properly "recycled".
      """
      
      And later:
      
      """
      This patch replaces my submission of Sun, 16 Apr and addresses Jeremy
      Hylton's suggestions that we also limit the size of the free tuple
      list.  I chose 2000 as the maximum number of tuples of any particular
      size to save.
      
      There was also a problem with the previous version of this patch
      causing a core dump if Python was built with Py_TRACE_REFS.  This is
      fixed in the below version of the patch, which uses tupledealloc
      instead of _Py_Dealloc.
      """
      b8a9659a
    • Guido van Rossum's avatar
      Charles Waldman writes: · f13dfe26
      Guido van Rossum authored
      """
      In the course of debugging this I also saw that cPickle is
      inconsistent with pickle - if you attempt a pickle.load or pickle.dump
      on a closed file, you get a ValueError, whereas the corresponding
      cPickle operations give an IOError.  Since cPickle is advertised as
      being compatible with pickle, I changed these exceptions to match.
      """
      f13dfe26
    • Guido van Rossum's avatar
      Charles Waldman writes: · 9c50cfd6
      Guido van Rossum authored
      """
      Problem description:
      
      	Run the following script:
      
      import test.test_cpickle
      for x in xrange(1000000):
          reload(test.test_cpickle)
      
      Watch Python's memory use go up up and away!
      
      In the course of debugging this I also saw that cPickle is
      inconsistent with pickle - if you attempt a pickle.load or pickle.dump
      on a closed file, you get a ValueError, whereas the corresponding
      cPickle operations give an IOError.  Since cPickle is advertised as
      being compatible with pickle, I changed these exceptions to match.
      """
      9c50cfd6
    • Guido van Rossum's avatar
      Use an explicit macro SOCKETCLOSE which expands to closesocket (on · db753c91
      Guido van Rossum authored
      Windows), soclose (on OS2), or to close (everywhere else).
      
      Hopefully this fixes a new compilation error that I suddenly get on
      Windows because the macro definition for close -> closesocket
      apparently was done before including io.h, which contains a prototype
      for close.  (No idea why this wasn't an error before.)
      db753c91
    • Guido van Rossum's avatar
      Patch by Brian Hooper, somewhat augmented by GvR, to strip a trailing · eb4b44d9
      Guido van Rossum authored
      backslash from the pathname argument to stat() on Windows -- while on
      Unix, stat("/bin/") succeeds and does the same thing as stat("/bin"),
      on Windows, stat("\\windows\\") fails while stat("\\windows") succeeds.
      This modified version of the patch recognizes both / and \.
      
      (This is odd behavior of the MS C library, since
      os.listdir("\\windows\\") succeeds!)
      eb4b44d9
    • Guido van Rossum's avatar
    • Greg Ward's avatar
      Fix 'check_metadata()' so it grovels through the distribution's metadata · 29ec0a06
      Greg Ward authored
      object, rather than through the distribution itself (since I moved the meta-
      data out to a DistributionMetadata instance).
      29ec0a06
    • Greg Ward's avatar
      f102babe
    • Greg Ward's avatar
      Patch from Andrew Kuchling: allow multiple include/exclude patterns · 4d0ad645
      Greg Ward authored
      for all commands except 'prune' and 'graft'.
      4d0ad645
    • Greg Ward's avatar
      Fixed the '--license' option so it's officially an alias for '--licence', · f091d542
      Greg Ward authored
      and now actually works.
      f091d542
    • Greg Ward's avatar
      Added the capability for alias options. · 3564cc48
      Greg Ward authored
      3564cc48
    • Greg Ward's avatar
      c4242105
    • Greg Ward's avatar
      Patch, originally from Bastian Kleineidam and savagely mutilated by me, · 77cfbaac
      Greg Ward authored
      to add the "display metadata" options: --name, --version, --author,
      and so forth.  Main changes:
        * added 'display_options' class attribute to list all the "display only"
          options (--help-commands plus the metadata options)
        * added DistributionMetadata class as a place to put the actual
          metadata information from the setup script (not to be confused with
          the metadata display options); the logic dealing with metadata
          (eg. return self.name or "UNKNOWN") is now  in this class
        * changed 'parse_command_line()' to use the new OO interface provided
          by fancy_getopt, mainly so we can get at the original order of
          options on the command line, so we can print multiple lines of
          distribution meta-data in the order specified by the user
        * added 'handle_display_options()' to handle display-only options
      Also fixed some crufty old comments/docstrings.
      77cfbaac
    • Greg Ward's avatar
      Made 'generate_help()' and 'print_help()' methods of FancyGetopt. · 1f32ccfa
      Greg Ward authored
      Added 'set_option_table()' method.
      Added missing 'self' to 'get_option_order()'.
      Cosmetic/comment/docstring tweaks.
      1f32ccfa
    • Greg Ward's avatar
      Continuing the refactoring: deleted the old 'fancy_getopt()' function, · e80cfed9
      Greg Ward authored
      leaving in its place a tiny wrapper around the FancyGetopt class
      for backwards compatibility.
      e80cfed9
    • Greg Ward's avatar
      Hefty refactoring: converted 'fancy_getopt()' function into FancyGetopt · 2f2e019a
      Greg Ward authored
      class.  (Mainly this was to support the ability to go back after the
      getopt operation is done and get extra information about the parse,
      in particular the original order of options seen on the command line.
      But it's a big improvement and should make it a lot easier to add
      functionality in the future.)
      2f2e019a
  2. 19 Apr, 2000 12 commits
  3. 18 Apr, 2000 1 commit
  4. 17 Apr, 2000 2 commits
  5. 15 Apr, 2000 2 commits
    • Greg Ward's avatar
      1fe7b3a2
    • Greg Ward's avatar
      Cleaned up/simplified error-handling: · 9370766b
      Greg Ward authored
        - DistutilsOptionError is now documented as it's actually used, ie.
          to indicate bogus option values (usually user options, eg. from
          the command-line)
        - added DistutilsSetupError to indicate errors that definitely arise
          in the setup script
        - got rid of DistutilsValueError, and changed all usage of it to
          either DistutilsSetupError or ValueError as appropriate
        - simplified a bunch of option get/set methods in Command and
          Distribution classes -- just pass on AttributeError most of
          the time, rather than turning it into something else
      9370766b
  6. 14 Apr, 2000 7 commits