Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
24d659da
Commit
24d659da
authored
Oct 23, 2011
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use InterruptedError instead of checking for EINTR
parent
dcbb822c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
17 additions
and
38 deletions
+17
-38
Lib/_pyio.py
Lib/_pyio.py
+4
-13
Lib/asyncore.py
Lib/asyncore.py
+4
-9
Lib/multiprocessing/util.py
Lib/multiprocessing/util.py
+3
-6
Lib/socket.py
Lib/socket.py
+3
-5
Lib/subprocess.py
Lib/subprocess.py
+2
-4
Lib/test/test_socket.py
Lib/test/test_socket.py
+1
-1
No files found.
Lib/_pyio.py
View file @
24d659da
...
@@ -14,7 +14,6 @@ except ImportError:
...
@@ -14,7 +14,6 @@ except ImportError:
import
io
import
io
from
io
import
(
__all__
,
SEEK_SET
,
SEEK_CUR
,
SEEK_END
)
from
io
import
(
__all__
,
SEEK_SET
,
SEEK_CUR
,
SEEK_END
)
from
errno
import
EINTR
# open() uses st_blksize whenever we can
# open() uses st_blksize whenever we can
DEFAULT_BUFFER_SIZE
=
8
*
1024
# bytes
DEFAULT_BUFFER_SIZE
=
8
*
1024
# bytes
...
@@ -948,9 +947,7 @@ class BufferedReader(_BufferedIOMixin):
...
@@ -948,9 +947,7 @@ class BufferedReader(_BufferedIOMixin):
# Read until EOF or until read() would block.
# Read until EOF or until read() would block.
try
:
try
:
chunk
=
self
.
raw
.
read
()
chunk
=
self
.
raw
.
read
()
except
IOError
as
e
:
except
InterruptedError
:
if
e
.
errno
!=
EINTR
:
raise
continue
continue
if
chunk
in
empty_values
:
if
chunk
in
empty_values
:
nodata_val
=
chunk
nodata_val
=
chunk
...
@@ -972,9 +969,7 @@ class BufferedReader(_BufferedIOMixin):
...
@@ -972,9 +969,7 @@ class BufferedReader(_BufferedIOMixin):
while
avail
<
n
:
while
avail
<
n
:
try
:
try
:
chunk
=
self
.
raw
.
read
(
wanted
)
chunk
=
self
.
raw
.
read
(
wanted
)
except
IOError
as
e
:
except
InterruptedError
:
if
e
.
errno
!=
EINTR
:
raise
continue
continue
if
chunk
in
empty_values
:
if
chunk
in
empty_values
:
nodata_val
=
chunk
nodata_val
=
chunk
...
@@ -1007,9 +1002,7 @@ class BufferedReader(_BufferedIOMixin):
...
@@ -1007,9 +1002,7 @@ class BufferedReader(_BufferedIOMixin):
while
True
:
while
True
:
try
:
try
:
current
=
self
.
raw
.
read
(
to_read
)
current
=
self
.
raw
.
read
(
to_read
)
except
IOError
as
e
:
except
InterruptedError
:
if
e
.
errno
!=
EINTR
:
raise
continue
continue
break
break
if
current
:
if
current
:
...
@@ -1120,9 +1113,7 @@ class BufferedWriter(_BufferedIOMixin):
...
@@ -1120,9 +1113,7 @@ class BufferedWriter(_BufferedIOMixin):
while
self
.
_write_buf
:
while
self
.
_write_buf
:
try
:
try
:
n
=
self
.
raw
.
write
(
self
.
_write_buf
)
n
=
self
.
raw
.
write
(
self
.
_write_buf
)
except
IOError
as
e
:
except
InterruptedError
:
if
e
.
errno
!=
EINTR
:
raise
continue
continue
if
n
>
len
(
self
.
_write_buf
)
or
n
<
0
:
if
n
>
len
(
self
.
_write_buf
)
or
n
<
0
:
raise
IOError
(
"write() returned incorrect number of bytes"
)
raise
IOError
(
"write() returned incorrect number of bytes"
)
...
...
Lib/asyncore.py
View file @
24d659da
...
@@ -54,7 +54,7 @@ import warnings
...
@@ -54,7 +54,7 @@ import warnings
import
os
import
os
from
errno
import
EALREADY
,
EINPROGRESS
,
EWOULDBLOCK
,
ECONNRESET
,
EINVAL
,
\
from
errno
import
EALREADY
,
EINPROGRESS
,
EWOULDBLOCK
,
ECONNRESET
,
EINVAL
,
\
ENOTCONN
,
ESHUTDOWN
,
EI
NTR
,
EI
SCONN
,
EBADF
,
ECONNABORTED
,
EPIPE
,
EAGAIN
,
\
ENOTCONN
,
ESHUTDOWN
,
EISCONN
,
EBADF
,
ECONNABORTED
,
EPIPE
,
EAGAIN
,
\
errorcode
errorcode
_DISCONNECTED
=
frozenset
((
ECONNRESET
,
ENOTCONN
,
ESHUTDOWN
,
ECONNABORTED
,
EPIPE
,
_DISCONNECTED
=
frozenset
((
ECONNRESET
,
ENOTCONN
,
ESHUTDOWN
,
ECONNABORTED
,
EPIPE
,
...
@@ -143,11 +143,8 @@ def poll(timeout=0.0, map=None):
...
@@ -143,11 +143,8 @@ def poll(timeout=0.0, map=None):
try
:
try
:
r
,
w
,
e
=
select
.
select
(
r
,
w
,
e
,
timeout
)
r
,
w
,
e
=
select
.
select
(
r
,
w
,
e
,
timeout
)
except
select
.
error
as
err
:
except
InterruptedError
:
if
err
.
args
[
0
]
!=
EINTR
:
return
raise
else
:
return
for
fd
in
r
:
for
fd
in
r
:
obj
=
map
.
get
(
fd
)
obj
=
map
.
get
(
fd
)
...
@@ -190,9 +187,7 @@ def poll2(timeout=0.0, map=None):
...
@@ -190,9 +187,7 @@ def poll2(timeout=0.0, map=None):
pollster
.
register
(
fd
,
flags
)
pollster
.
register
(
fd
,
flags
)
try
:
try
:
r
=
pollster
.
poll
(
timeout
)
r
=
pollster
.
poll
(
timeout
)
except
select
.
error
as
err
:
except
InterruptedError
:
if
err
.
args
[
0
]
!=
EINTR
:
raise
r
=
[]
r
=
[]
for
fd
,
flags
in
r
:
for
fd
,
flags
in
r
:
obj
=
map
.
get
(
fd
)
obj
=
map
.
get
(
fd
)
...
...
Lib/multiprocessing/util.py
View file @
24d659da
...
@@ -327,15 +327,12 @@ class ForkAwareLocal(threading.local):
...
@@ -327,15 +327,12 @@ class ForkAwareLocal(threading.local):
# Automatic retry after EINTR
# Automatic retry after EINTR
#
#
def
_eintr_retry
(
func
,
_errors
=
(
EnvironmentError
,
select
.
error
)
):
def
_eintr_retry
(
func
):
@
functools
.
wraps
(
func
)
@
functools
.
wraps
(
func
)
def
wrapped
(
*
args
,
**
kwargs
):
def
wrapped
(
*
args
,
**
kwargs
):
while
True
:
while
True
:
try
:
try
:
return
func
(
*
args
,
**
kwargs
)
return
func
(
*
args
,
**
kwargs
)
except
_errors
as
e
:
except
InterruptedError
:
# select.error has no `errno` attribute
continue
if
e
.
args
[
0
]
==
errno
.
EINTR
:
continue
raise
return
wrapped
return
wrapped
Lib/socket.py
View file @
24d659da
...
@@ -53,7 +53,6 @@ try:
...
@@ -53,7 +53,6 @@ try:
except
ImportError
:
except
ImportError
:
errno
=
None
errno
=
None
EBADF
=
getattr
(
errno
,
'EBADF'
,
9
)
EBADF
=
getattr
(
errno
,
'EBADF'
,
9
)
EINTR
=
getattr
(
errno
,
'EINTR'
,
4
)
EAGAIN
=
getattr
(
errno
,
'EAGAIN'
,
11
)
EAGAIN
=
getattr
(
errno
,
'EAGAIN'
,
11
)
EWOULDBLOCK
=
getattr
(
errno
,
'EWOULDBLOCK'
,
11
)
EWOULDBLOCK
=
getattr
(
errno
,
'EWOULDBLOCK'
,
11
)
...
@@ -280,11 +279,10 @@ class SocketIO(io.RawIOBase):
...
@@ -280,11 +279,10 @@ class SocketIO(io.RawIOBase):
except
timeout
:
except
timeout
:
self
.
_timeout_occurred
=
True
self
.
_timeout_occurred
=
True
raise
raise
except
InterruptedError
:
continue
except
error
as
e
:
except
error
as
e
:
n
=
e
.
args
[
0
]
if
e
.
args
[
0
]
in
_blocking_errnos
:
if
n
==
EINTR
:
continue
if
n
in
_blocking_errnos
:
return
None
return
None
raise
raise
...
...
Lib/subprocess.py
View file @
24d659da
...
@@ -450,10 +450,8 @@ def _eintr_retry_call(func, *args):
...
@@ -450,10 +450,8 @@ def _eintr_retry_call(func, *args):
while
True
:
while
True
:
try
:
try
:
return
func
(
*
args
)
return
func
(
*
args
)
except
(
OSError
,
IOError
)
as
e
:
except
InterruptedError
:
if
e
.
errno
==
errno
.
EINTR
:
continue
continue
raise
def
call
(
*
popenargs
,
timeout
=
None
,
**
kwargs
):
def
call
(
*
popenargs
,
timeout
=
None
,
**
kwargs
):
...
...
Lib/test/test_socket.py
View file @
24d659da
...
@@ -3584,7 +3584,7 @@ class FileObjectInterruptedTestCase(unittest.TestCase):
...
@@ -3584,7 +3584,7 @@ class FileObjectInterruptedTestCase(unittest.TestCase):
@
staticmethod
@
staticmethod
def
_raise_eintr
():
def
_raise_eintr
():
raise
socket
.
error
(
errno
.
EINTR
)
raise
socket
.
error
(
errno
.
EINTR
,
"interrupted"
)
def
_textiowrap_mock_socket
(
self
,
mock
,
buffering
=-
1
):
def
_textiowrap_mock_socket
(
self
,
mock
,
buffering
=-
1
):
raw
=
socket
.
SocketIO
(
mock
,
"r"
)
raw
=
socket
.
SocketIO
(
mock
,
"r"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment