Mercurial > hgrepos > Python > apps > py-cutils
comparison cutils/shasum.py @ 79:8708c34e2723
Handle EINTR also in combination with EAGAIN and EWOULDBLOCK
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 28 Feb 2022 21:31:26 +0100 |
| parents | a31de3c65877 |
| children | 05e2bf4796fd |
comparison
equal
deleted
inserted
replaced
| 78:5d297069ab48 | 79:8708c34e2723 |
|---|---|
| 503 # No mmmap available -> use traditional low-level file IO | 503 # No mmmap available -> use traditional low-level file IO |
| 504 while True: | 504 while True: |
| 505 try: | 505 try: |
| 506 buf = os.read(fd, CHUNK_SIZE) | 506 buf = os.read(fd, CHUNK_SIZE) |
| 507 except OSError as e: | 507 except OSError as e: |
| 508 if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK): | 508 if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK, |
| 509 errno.EINTR): | |
| 509 raise | 510 raise |
| 510 else: | 511 else: |
| 511 if len(buf) == 0: | 512 if len(buf) == 0: |
| 512 break | 513 break |
| 513 h.update(buf) | 514 h.update(buf) |
| 558 h = hashobj() | 559 h = hashobj() |
| 559 while True: | 560 while True: |
| 560 try: | 561 try: |
| 561 buf = instream.read(CHUNK_SIZE) | 562 buf = instream.read(CHUNK_SIZE) |
| 562 except OSError as e: | 563 except OSError as e: |
| 563 if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK): | 564 if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK, errno.EINTR): |
| 564 raise | 565 raise |
| 565 else: | 566 else: |
| 566 if buf is not None: | 567 if buf is not None: |
| 567 if len(buf) == 0: | 568 if len(buf) == 0: |
| 568 break | 569 break |
