~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

added 'while True:' so multiple process can spin on log file creation
and first one wins.

Show diffs side-by-side

added added

removed removed

Lines of Context:
244
244
        """
245
245
        buffering = 0 # unbuffered
246
246
        mode = os.O_WRONLY | os.O_APPEND | osutils.O_TEXT
247
 
        try:
248
 
            fd = os.open(filename, mode)
249
 
            logfile = os.fdopen(fd, 'at', buffering)
250
 
            return logfile
251
 
        except OSError, e:
252
 
            if e.errno != errno.ENOENT:
253
 
                raise
254
 
        try:
255
 
            fd = os.open(filename, mode | os.O_CREAT | os.O_EXCL)
256
 
            logfile = os.fdopen(fd, 'at', buffering)
257
 
        except OSError, e:
258
 
            if e.errno != errno.EEXIST:
259
 
                raise
260
 
        else:
261
 
            # Copy ownership from parent directory
262
 
            osutils.copy_ownership(filename)
263
 
            return logfile
 
247
        while True:
 
248
            try:
 
249
                fd = os.open(filename, mode)
 
250
                logfile = os.fdopen(fd, 'at', buffering)
 
251
                return logfile
 
252
            except OSError, e:
 
253
                if e.errno != errno.ENOENT:
 
254
                    raise
 
255
            try:
 
256
                fd = os.open(filename, mode | os.O_CREAT | os.O_EXCL)
 
257
                logfile = os.fdopen(fd, 'at', buffering)
 
258
            except OSError, e:
 
259
                if e.errno != errno.EEXIST:
 
260
                    raise
 
261
            else:
 
262
                # Copy ownership from parent directory
 
263
                osutils.copy_ownership(filename)
 
264
                return logfile
264
265
 
265
266
 
266
267
    _bzr_log_filename = _get_bzr_log_filename()