equal
deleted
inserted
replaced
463 # of EPIPE. The data should belong to the current session |
463 # of EPIPE. The data should belong to the current session |
464 # and should never persist. |
464 # and should never persist. |
465 os.dup2(nullfd, fp.fileno()) |
465 os.dup2(nullfd, fp.fileno()) |
466 fp.flush() |
466 fp.flush() |
467 os.dup2(fd, fp.fileno()) |
467 os.dup2(fd, fp.fileno()) |
|
468 os.close(fd) |
468 except OSError as err: |
469 except OSError as err: |
469 # According to issue6330, running chg on heavy loaded systems |
470 # According to issue6330, running chg on heavy loaded systems |
470 # can lead to EBUSY. [man dup2] indicates that, on Linux, |
471 # can lead to EBUSY. [man dup2] indicates that, on Linux, |
471 # EBUSY comes from a race condition between open() and dup2(). |
472 # EBUSY comes from a race condition between open() and dup2(). |
472 # However it's not clear why open() race occurred for |
473 # However it's not clear why open() race occurred for |
475 b'chgserver', |
476 b'chgserver', |
476 b'got %s while duplicating %s\n', |
477 b'got %s while duplicating %s\n', |
477 stringutil.forcebytestr(err), |
478 stringutil.forcebytestr(err), |
478 fn, |
479 fn, |
479 ) |
480 ) |
480 os.close(fd) |
|
481 setattr(self, cn, ch) |
481 setattr(self, cn, ch) |
482 setattr(ui, fn, fp) |
482 setattr(ui, fn, fp) |
483 os.close(nullfd) |
483 os.close(nullfd) |
484 del self._oldios[:] |
484 del self._oldios[:] |
485 |
485 |