[Python-checkins] python/dist/src/Lib tempfile.py,1.49,1.50

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Sat, 17 Aug 2002 07:50:26 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv17942

Modified Files:
	tempfile.py 
Log Message:
Get rid of _once(); inlining it takes less code. :-)

Also, don't call gettempdir() in the default expression for the 'dir'
argument to various functions; use 'dir=None' for the default and
insert 'if dir is None: dir = gettemptir()' in the bodies.  That way
the work done by gettempdir is postponed until needed.



Index: tempfile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/tempfile.py,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** tempfile.py	14 Aug 2002 15:41:26 -0000	1.49
--- tempfile.py	17 Aug 2002 14:50:24 -0000	1.50
***************
*** 81,111 ****
  _once_lock = _allocate_lock()
  
- def _once(var, initializer):
-     """Wrapper to execute an initialization operation just once,
-     even if multiple threads reach the same point at the same time.
- 
-     var is the name (as a string) of the variable to be entered into
-     the current global namespace.
- 
-     initializer is a callable which will return the appropriate initial
-     value for variable.  It will be called only if variable is not
-     present in the global namespace, or its current value is None.
- 
-     Do not call _once from inside an initializer routine, it will deadlock.
-     """
- 
-     vars = globals()
-     # Check first outside the lock.
-     if vars.get(var) is not None:
-         return
-     try:
-         _once_lock.acquire()
-         # Check again inside the lock.
-         if vars.get(var) is not None:
-             return
-         vars[var] = initializer()
-     finally:
-         _once_lock.release()
- 
  class _RandomNameSequence:
      """An instance of _RandomNameSequence generates an endless
--- 81,84 ----
***************
*** 179,184 ****
  def _get_default_tempdir():
      """Calculate the default directory to use for temporary files.
!     This routine should be called through '_once' (see above) as we
!     do not want multiple threads attempting this calculation simultaneously.
  
      We determine whether or not a candidate temp dir is usable by
--- 152,156 ----
  def _get_default_tempdir():
      """Calculate the default directory to use for temporary files.
!     This routine should be called exactly once.
  
      We determine whether or not a candidate temp dir is usable by
***************
*** 213,220 ****
                      ("No usable temporary directory found in %s" % dirlist))
  
  def _get_candidate_names():
      """Common setup sequence for all user-callable interfaces."""
  
!     _once('_name_sequence', _RandomNameSequence)
      return _name_sequence
  
--- 185,201 ----
                      ("No usable temporary directory found in %s" % dirlist))
  
+ _name_sequence = None
+ 
  def _get_candidate_names():
      """Common setup sequence for all user-callable interfaces."""
  
!     global _name_sequence
!     if _name_sequence is None:
!         _once_lock.acquire()
!         try:
!             if _name_sequence is None:
!                 _name_sequence = _RandomNameSequence()
!         finally:
!             _once_lock.release()
      return _name_sequence
  
***************
*** 246,255 ****
      return template
  
  def gettempdir():
      """Accessor for tempdir.tempdir."""
!     _once('tempdir', _get_default_tempdir)
      return tempdir
  
! def mkstemp(suffix="", prefix=template, dir=gettempdir(), text=False):
      """mkstemp([suffix, [prefix, [dir, [text]]]])
      User-callable function to create and return a unique temporary
--- 227,245 ----
      return template
  
+ tempdir = None
+ 
  def gettempdir():
      """Accessor for tempdir.tempdir."""
!     global tempdir
!     if tempdir is None:
!         _once_lock.acquire()
!         try:
!             if tempdir is None:
!                 tempdir = _get_default_tempdir()
!         finally:
!             _once_lock.release()
      return tempdir
  
! def mkstemp(suffix="", prefix=template, dir=None, text=False):
      """mkstemp([suffix, [prefix, [dir, [text]]]])
      User-callable function to create and return a unique temporary
***************
*** 278,281 ****
--- 268,274 ----
      """
  
+     if dir is None:
+         dir = gettempdir()
+ 
      if text:
          flags = _text_openflags
***************
*** 286,290 ****
  
  
! def mkdtemp(suffix="", prefix=template, dir=gettempdir()):
      """mkdtemp([suffix, [prefix, [dir]]])
      User-callable function to create and return a unique temporary
--- 279,283 ----
  
  
! def mkdtemp(suffix="", prefix=template, dir=None):
      """mkdtemp([suffix, [prefix, [dir]]])
      User-callable function to create and return a unique temporary
***************
*** 300,303 ****
--- 293,299 ----
      """
  
+     if dir is None:
+         dir = gettempdir()
+ 
      names = _get_candidate_names()
  
***************
*** 315,319 ****
      raise IOError, (_errno.EEXIST, "No usable temporary directory name found")
  
! def mktemp(suffix="", prefix=template, dir=gettempdir()):
      """mktemp([suffix, [prefix, [dir]]])
      User-callable function to return a unique temporary file name.  The
--- 311,315 ----
      raise IOError, (_errno.EEXIST, "No usable temporary directory name found")
  
! def mktemp(suffix="", prefix=template, dir=None):
      """mktemp([suffix, [prefix, [dir]]])
      User-callable function to return a unique temporary file name.  The
***************
*** 333,336 ****
--- 329,335 ----
            RuntimeWarning, stacklevel=2)
  
+     if dir is None:
+         dir = gettempdir()
+ 
      names = _get_candidate_names()
      for seq in xrange(TMP_MAX):
***************
*** 384,388 ****
  
  def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="",
!                        prefix=template, dir=gettempdir()):
      """Create and return a temporary file.
      Arguments:
--- 383,387 ----
  
  def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="",
!                        prefix=template, dir=None):
      """Create and return a temporary file.
      Arguments:
***************
*** 397,400 ****
--- 396,402 ----
      """
  
+     if dir is None:
+         dir = gettempdir()
+ 
      if 'b' in mode:
          flags = _bin_openflags
***************
*** 418,422 ****
  else:
      def TemporaryFile(mode='w+b', bufsize=-1, suffix="",
!                       prefix=template, dir=gettempdir()):
          """Create and return a temporary file.
          Arguments:
--- 420,424 ----
  else:
      def TemporaryFile(mode='w+b', bufsize=-1, suffix="",
!                       prefix=template, dir=None):
          """Create and return a temporary file.
          Arguments:
***************
*** 429,432 ****
--- 431,437 ----
          exist when it is closed.
          """
+ 
+         if dir is None:
+             dir = gettempdir()
  
          if 'b' in mode: