mirror of https://github.com/python/cpython
Merged revisions 77952,78030,78102,78104,78107,78206,78216,78296-78297,78328,78331-78332,78336,78339,78343,78378-78379,78415,78559,78717,78791 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r77952 | mark.dickinson | 2010-02-03 10:50:14 -0600 (Wed, 03 Feb 2010) | 1 line Fix test_inspect.py data to match recent change to inspect_fodder.py (r77942). ........ r78030 | benjamin.peterson | 2010-02-06 14:14:10 -0600 (Sat, 06 Feb 2010) | 1 line check type_getattro for correctness in a descriptor corner case ........ r78102 | andrew.kuchling | 2010-02-07 19:35:35 -0600 (Sun, 07 Feb 2010) | 1 line Move distutils into its own subsection; add various items ........ r78104 | andrew.kuchling | 2010-02-08 07:22:24 -0600 (Mon, 08 Feb 2010) | 1 line Add two items; move a subsection ........ r78107 | antoine.pitrou | 2010-02-08 14:25:47 -0600 (Mon, 08 Feb 2010) | 3 lines Clarify and correct description for ccbench and iobench. ........ r78206 | r.david.murray | 2010-02-16 11:55:26 -0600 (Tue, 16 Feb 2010) | 3 lines Make the references to Popen in the description of Call and check_call into links. ........ r78216 | andrew.kuchling | 2010-02-18 08:16:48 -0600 (Thu, 18 Feb 2010) | 1 line Add various items ........ r78296 | andrew.kuchling | 2010-02-21 20:08:45 -0600 (Sun, 21 Feb 2010) | 1 line Re-word ........ r78297 | andrew.kuchling | 2010-02-21 20:29:10 -0600 (Sun, 21 Feb 2010) | 1 line #7076: mention SystemRandom class near start of the module docs; reword change description for clarity. Noted by Shawn Ligocki. ........ r78328 | jack.diederich | 2010-02-22 12:17:16 -0600 (Mon, 22 Feb 2010) | 1 line fixes issue #7530, serve_forever() ........ r78331 | andrew.kuchling | 2010-02-22 12:38:23 -0600 (Mon, 22 Feb 2010) | 1 line Fix comment typo ........ r78332 | andrew.kuchling | 2010-02-22 12:42:07 -0600 (Mon, 22 Feb 2010) | 2 lines #7627: MH.remove() would fail if the MH mailbox was locked; it would call _unlock_file() and pass it a closed file object. Noted by Rob Austein. ........ r78336 | jack.diederich | 2010-02-22 13:55:22 -0600 (Mon, 22 Feb 2010) | 1 line fixes issue #1522237, bad init check in _threading_local ........ r78339 | jack.diederich | 2010-02-22 15:27:38 -0600 (Mon, 22 Feb 2010) | 1 line * fix issue#7476 ........ r78343 | andrew.kuchling | 2010-02-22 16:48:41 -0600 (Mon, 22 Feb 2010) | 10 lines #2560: remove an unnecessary 'for' loop from my_fgets() in Parser/myreadline.c. Noted by Joseph Armbruster; patch by Jessica McKellar. The original code was 'for (;;) {...}', where ... ended with a 'return -2' statement and did not contain a 'break' or 'continue' statement. Therefore, the body of the loop is always executed once. Once upon a time there was a 'continue' in the loop, but it was removed in rev36346, committed by mwh on Wed Jul 7 17:44:12 2004. ........ r78378 | jack.diederich | 2010-02-23 11:23:30 -0600 (Tue, 23 Feb 2010) | 1 line fixup markup error ........ r78379 | jack.diederich | 2010-02-23 13:34:06 -0600 (Tue, 23 Feb 2010) | 1 line issue#6442 use in operator instead of has_key ........ r78415 | dirkjan.ochtman | 2010-02-23 22:00:52 -0600 (Tue, 23 Feb 2010) | 1 line Issue #7733: add explicit reference in asyncore docs. ........ r78559 | andrew.kuchling | 2010-03-01 13:45:21 -0600 (Mon, 01 Mar 2010) | 1 line #7637: update discussion of minidom.unlink() and garbage collection ........ r78717 | benjamin.peterson | 2010-03-05 21:13:33 -0600 (Fri, 05 Mar 2010) | 1 line settscdump is definitely an implementation detail ........ r78791 | andrew.kuchling | 2010-03-08 06:00:39 -0600 (Mon, 08 Mar 2010) | 1 line Add various items ........
This commit is contained in:
parent
7588b8b355
commit
21896a330a
|
@ -54,9 +54,9 @@ Notes:
|
||||||
requires the :program:`compress` program. Notice that this format is now
|
requires the :program:`compress` program. Notice that this format is now
|
||||||
pending for deprecation and will be removed in the future versions of Python.
|
pending for deprecation and will be removed in the future versions of Python.
|
||||||
|
|
||||||
When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or ``tar``), you
|
When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or
|
||||||
can specify under Unix the ``owner`` and ``group`` names that will be set for
|
``tar``) under Unix, you can specify the ``owner`` and ``group`` names
|
||||||
each member of the archive.
|
that will be set for each member of the archive.
|
||||||
|
|
||||||
For example, if you want all files of the archive to be owned by root::
|
For example, if you want all files of the archive to be owned by root::
|
||||||
|
|
||||||
|
|
|
@ -201,7 +201,8 @@ any that have been added to the map during asynchronous service) is closed.
|
||||||
.. method:: bind(address)
|
.. method:: bind(address)
|
||||||
|
|
||||||
Bind the socket to *address*. The socket must not already be bound. (The
|
Bind the socket to *address*. The socket must not already be bound. (The
|
||||||
format of *address* depends on the address family --- see above.) To mark
|
format of *address* depends on the address family --- refer to the
|
||||||
|
:mod:`socket` documentation for more information.) To mark
|
||||||
the socket as re-usable (setting the :const:`SO_REUSEADDR` option), call
|
the socket as re-usable (setting the :const:`SO_REUSEADDR` option), call
|
||||||
the :class:`dispatcher` object's :meth:`set_reuse_addr` method.
|
the :class:`dispatcher` object's :meth:`set_reuse_addr` method.
|
||||||
|
|
||||||
|
|
|
@ -1131,7 +1131,7 @@ their parent process exits. The manager classes are defined in the
|
||||||
|
|
||||||
Create a BaseManager object.
|
Create a BaseManager object.
|
||||||
|
|
||||||
Once created one should call :meth:`start` or :meth:`serve_forever` to ensure
|
Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
|
||||||
that the manager object refers to a started manager process.
|
that the manager object refers to a started manager process.
|
||||||
|
|
||||||
*address* is the address on which the manager process listens for new
|
*address* is the address on which the manager process listens for new
|
||||||
|
@ -1147,10 +1147,6 @@ their parent process exits. The manager classes are defined in the
|
||||||
Start a subprocess to start the manager. If *initializer* is not ``None``
|
Start a subprocess to start the manager. If *initializer* is not ``None``
|
||||||
then the subprocess will call ``initializer(*initargs)`` when it starts.
|
then the subprocess will call ``initializer(*initargs)`` when it starts.
|
||||||
|
|
||||||
.. method:: serve_forever()
|
|
||||||
|
|
||||||
Run the server in the current process.
|
|
||||||
|
|
||||||
.. method:: get_server()
|
.. method:: get_server()
|
||||||
|
|
||||||
Returns a :class:`Server` object which represents the actual server under
|
Returns a :class:`Server` object which represents the actual server under
|
||||||
|
|
|
@ -35,6 +35,18 @@ basic generator of your own devising: in that case, override the :meth:`random`,
|
||||||
Optionally, a new generator can supply a :meth:`getrandbits` method --- this
|
Optionally, a new generator can supply a :meth:`getrandbits` method --- this
|
||||||
allows :meth:`randrange` to produce selections over an arbitrarily large range.
|
allows :meth:`randrange` to produce selections over an arbitrarily large range.
|
||||||
|
|
||||||
|
As an example of subclassing, the :mod:`random` module provides the
|
||||||
|
:class:`WichmannHill` class that implements an alternative generator in pure
|
||||||
|
Python. The class provides a backward compatible way to reproduce results from
|
||||||
|
earlier versions of Python, which used the Wichmann-Hill algorithm as the core
|
||||||
|
generator. Note that this Wichmann-Hill generator can no longer be recommended:
|
||||||
|
its period is too short by contemporary standards, and the sequence generated is
|
||||||
|
known to fail some stringent randomness tests. See the references below for a
|
||||||
|
recent variant that repairs these flaws.
|
||||||
|
|
||||||
|
The :mod:`random` module also provides the :class:`SystemRandom` class which
|
||||||
|
uses the system function :func:`os.urandom` to generate random numbers
|
||||||
|
from sources provided by the operating system.
|
||||||
|
|
||||||
Bookkeeping functions:
|
Bookkeeping functions:
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ This module also defines four shortcut functions:
|
||||||
Run command with arguments. Wait for command to complete, then return the
|
Run command with arguments. Wait for command to complete, then return the
|
||||||
:attr:`returncode` attribute.
|
:attr:`returncode` attribute.
|
||||||
|
|
||||||
The arguments are the same as for the Popen constructor. Example::
|
The arguments are the same as for the :class:`Popen` constructor. Example::
|
||||||
|
|
||||||
>>> retcode = subprocess.call(["ls", "-l"])
|
>>> retcode = subprocess.call(["ls", "-l"])
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ This module also defines four shortcut functions:
|
||||||
:exc:`CalledProcessError` object will have the return code in the
|
:exc:`CalledProcessError` object will have the return code in the
|
||||||
:attr:`returncode` attribute.
|
:attr:`returncode` attribute.
|
||||||
|
|
||||||
The arguments are the same as for the Popen constructor. Example::
|
The arguments are the same as for the :class:`Popen` constructor. Example::
|
||||||
|
|
||||||
>>> subprocess.check_call(["ls", "-l"])
|
>>> subprocess.check_call(["ls", "-l"])
|
||||||
0
|
0
|
||||||
|
|
|
@ -816,6 +816,10 @@ always available.
|
||||||
available only if Python was compiled with :option:`--with-tsc`. To understand
|
available only if Python was compiled with :option:`--with-tsc`. To understand
|
||||||
the output of this dump, read :file:`Python/ceval.c` in the Python sources.
|
the output of this dump, read :file:`Python/ceval.c` in the Python sources.
|
||||||
|
|
||||||
|
.. impl-detail::
|
||||||
|
This function is intimately bound to CPython implementation details and
|
||||||
|
thus not likely to be implemented elsewhere.
|
||||||
|
|
||||||
|
|
||||||
.. data:: stdin
|
.. data:: stdin
|
||||||
stdout
|
stdout
|
||||||
|
|
|
@ -82,22 +82,12 @@ document: the one that holds all others. Here is an example program::
|
||||||
dom3 = parseString("<myxml>Some data</myxml>")
|
dom3 = parseString("<myxml>Some data</myxml>")
|
||||||
assert dom3.documentElement.tagName == "myxml"
|
assert dom3.documentElement.tagName == "myxml"
|
||||||
|
|
||||||
When you are finished with a DOM, you should clean it up. This is necessary
|
When you are finished with a DOM tree, you may optionally call the
|
||||||
because some versions of Python do not support garbage collection of objects
|
:meth:`unlink` method to encourage early cleanup of the now-unneeded
|
||||||
that refer to each other in a cycle. Until this restriction is removed from all
|
objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific
|
||||||
versions of Python, it is safest to write your code as if cycles would not be
|
extension to the DOM API that renders the node and its descendants are
|
||||||
cleaned up.
|
essentially useless. Otherwise, Python's garbage collector will
|
||||||
|
eventually take care of the objects in the tree.
|
||||||
The way to clean up a DOM is to call its :meth:`unlink` method::
|
|
||||||
|
|
||||||
dom1.unlink()
|
|
||||||
dom2.unlink()
|
|
||||||
dom3.unlink()
|
|
||||||
|
|
||||||
:meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific extension to the DOM API.
|
|
||||||
After calling :meth:`unlink` on a node, the node and its descendants are
|
|
||||||
essentially useless.
|
|
||||||
|
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
|
|
|
@ -882,17 +882,9 @@ class MH(Mailbox):
|
||||||
raise KeyError('No message with key: %s' % key)
|
raise KeyError('No message with key: %s' % key)
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
try:
|
else:
|
||||||
if self._locked:
|
|
||||||
_lock_file(f)
|
|
||||||
try:
|
|
||||||
f.close()
|
|
||||||
os.remove(os.path.join(self._path, str(key)))
|
|
||||||
finally:
|
|
||||||
if self._locked:
|
|
||||||
_unlock_file(f)
|
|
||||||
finally:
|
|
||||||
f.close()
|
f.close()
|
||||||
|
os.remove(path)
|
||||||
|
|
||||||
def __setitem__(self, key, message):
|
def __setitem__(self, key, message):
|
||||||
"""Replace the keyed message; raise KeyError if it doesn't exist."""
|
"""Replace the keyed message; raise KeyError if it doesn't exist."""
|
||||||
|
|
|
@ -253,10 +253,13 @@ _safechars = string.ascii_letters + string.digits + '!@%_-+=:,./' # Safe unquote
|
||||||
_funnychars = '"`$\\' # Unsafe inside "double quotes"
|
_funnychars = '"`$\\' # Unsafe inside "double quotes"
|
||||||
|
|
||||||
def quote(file):
|
def quote(file):
|
||||||
|
''' return a shell-escaped version of the file string '''
|
||||||
for c in file:
|
for c in file:
|
||||||
if c not in _safechars:
|
if c not in _safechars:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
if not file:
|
||||||
|
return "''"
|
||||||
return file
|
return file
|
||||||
if '\'' not in file:
|
if '\'' not in file:
|
||||||
return '\'' + file + '\''
|
return '\'' + file + '\''
|
||||||
|
|
|
@ -4164,6 +4164,15 @@ order (MRO) for bases """
|
||||||
x.a = 42
|
x.a = 42
|
||||||
self.assertEqual(x.a, 42)
|
self.assertEqual(x.a, 42)
|
||||||
|
|
||||||
|
# Also check type_getattro for correctness.
|
||||||
|
class Meta(type):
|
||||||
|
pass
|
||||||
|
class X(object):
|
||||||
|
__metaclass__ = Meta
|
||||||
|
X.a = 42
|
||||||
|
Meta.a = Descr("a")
|
||||||
|
self.assertEqual(X.a, 42)
|
||||||
|
|
||||||
def test_getattr_hooks(self):
|
def test_getattr_hooks(self):
|
||||||
# issue 4230
|
# issue 4230
|
||||||
|
|
||||||
|
|
|
@ -166,12 +166,12 @@ class TestInterpreterStack(IsTestBase):
|
||||||
|
|
||||||
def test_trace(self):
|
def test_trace(self):
|
||||||
self.assertEqual(len(git.tr), 3)
|
self.assertEqual(len(git.tr), 3)
|
||||||
self.assertEqual(revise(*git.tr[0][1:]),
|
self.assertEqual(git.tr[0][1:], (modfile, 43, 'argue',
|
||||||
(modfile, 43, 'argue', [' spam(a, b, c)\n'], 0))
|
[' spam(a, b, c)\n'], 0))
|
||||||
self.assertEqual(revise(*git.tr[1][1:]),
|
self.assertEqual(git.tr[1][1:], (modfile, 9, 'spam',
|
||||||
(modfile, 9, 'spam', [' eggs(b + d, c + f)\n'], 0))
|
[' eggs(b + d, c + f)\n'], 0))
|
||||||
self.assertEqual(revise(*git.tr[2][1:]),
|
self.assertEqual(git.tr[2][1:], (modfile, 18, 'eggs',
|
||||||
(modfile, 18, 'eggs', [' q = y / 0\n'], 0))
|
[' q = y / 0\n'], 0))
|
||||||
|
|
||||||
def test_frame(self):
|
def test_frame(self):
|
||||||
args, varargs, varkw, locals = inspect.getargvalues(mod.fr)
|
args, varargs, varkw, locals = inspect.getargvalues(mod.fr)
|
||||||
|
|
|
@ -968,6 +968,13 @@ class TestMH(TestMailbox):
|
||||||
key0 = self._box.add(msg0)
|
key0 = self._box.add(msg0)
|
||||||
refmsg0 = self._box.get_message(key0)
|
refmsg0 = self._box.get_message(key0)
|
||||||
|
|
||||||
|
def test_issue7627(self):
|
||||||
|
msg0 = mailbox.MHMessage(self._template % 0)
|
||||||
|
key0 = self._box.add(msg0)
|
||||||
|
self._box.lock()
|
||||||
|
self._box.remove(key0)
|
||||||
|
self._box.unlock()
|
||||||
|
|
||||||
def test_pack(self):
|
def test_pack(self):
|
||||||
# Pack the contents of the mailbox
|
# Pack the contents of the mailbox
|
||||||
msg0 = mailbox.MHMessage(self._template % 0)
|
msg0 = mailbox.MHMessage(self._template % 0)
|
||||||
|
|
|
@ -82,6 +82,8 @@ class SimplePipeTests(unittest.TestCase):
|
||||||
self.assertEqual(pipes.quote("test%s'name'" % u),
|
self.assertEqual(pipes.quote("test%s'name'" % u),
|
||||||
'"test\\%s\'name\'"' % u)
|
'"test\\%s\'name\'"' % u)
|
||||||
|
|
||||||
|
self.assertEqual(pipes.quote(''), "''")
|
||||||
|
|
||||||
def testRepr(self):
|
def testRepr(self):
|
||||||
t = pipes.Template()
|
t = pipes.Template()
|
||||||
self.assertEqual(repr(t), "<Template instance, steps=[]>")
|
self.assertEqual(repr(t), "<Template instance, steps=[]>")
|
||||||
|
|
|
@ -832,6 +832,7 @@ Blake Winton
|
||||||
Jean-Claude Wippler
|
Jean-Claude Wippler
|
||||||
Frank Wierzbicki
|
Frank Wierzbicki
|
||||||
Lars Wirzenius
|
Lars Wirzenius
|
||||||
|
John Wiseman
|
||||||
Chris Withers
|
Chris Withers
|
||||||
Stefan Witzel
|
Stefan Witzel
|
||||||
Irek Wlizlo
|
Irek Wlizlo
|
||||||
|
|
|
@ -215,7 +215,7 @@ PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function versions of the 3 functions for tested whether curses has been
|
/* Function versions of the 3 functions for testing whether curses has been
|
||||||
initialised or not. */
|
initialised or not. */
|
||||||
|
|
||||||
static int func_PyCursesSetupTermCalled(void)
|
static int func_PyCursesSetupTermCalled(void)
|
||||||
|
|
|
@ -36,66 +36,63 @@ static int
|
||||||
my_fgets(char *buf, int len, FILE *fp)
|
my_fgets(char *buf, int len, FILE *fp)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
for (;;) {
|
if (PyOS_InputHook != NULL)
|
||||||
if (PyOS_InputHook != NULL)
|
(void)(PyOS_InputHook)();
|
||||||
(void)(PyOS_InputHook)();
|
errno = 0;
|
||||||
errno = 0;
|
p = fgets(buf, len, fp);
|
||||||
p = fgets(buf, len, fp);
|
if (p != NULL)
|
||||||
if (p != NULL)
|
return 0; /* No error */
|
||||||
return 0; /* No error */
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
/* In the case of a Ctrl+C or some other external event
|
/* In the case of a Ctrl+C or some other external event
|
||||||
interrupting the operation:
|
interrupting the operation:
|
||||||
Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32
|
Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32
|
||||||
error code (and feof() returns TRUE).
|
error code (and feof() returns TRUE).
|
||||||
Win9x: Ctrl+C seems to have no effect on fgets() returning
|
Win9x: Ctrl+C seems to have no effect on fgets() returning
|
||||||
early - the signal handler is called, but the fgets()
|
early - the signal handler is called, but the fgets()
|
||||||
only returns "normally" (ie, when Enter hit or feof())
|
only returns "normally" (ie, when Enter hit or feof())
|
||||||
|
*/
|
||||||
|
if (GetLastError()==ERROR_OPERATION_ABORTED) {
|
||||||
|
/* Signals come asynchronously, so we sleep a brief
|
||||||
|
moment before checking if the handler has been
|
||||||
|
triggered (we cant just return 1 before the
|
||||||
|
signal handler has been called, as the later
|
||||||
|
signal may be treated as a separate interrupt).
|
||||||
*/
|
*/
|
||||||
if (GetLastError()==ERROR_OPERATION_ABORTED) {
|
Sleep(1);
|
||||||
/* Signals come asynchronously, so we sleep a brief
|
|
||||||
moment before checking if the handler has been
|
|
||||||
triggered (we cant just return 1 before the
|
|
||||||
signal handler has been called, as the later
|
|
||||||
signal may be treated as a separate interrupt).
|
|
||||||
*/
|
|
||||||
Sleep(1);
|
|
||||||
if (PyOS_InterruptOccurred()) {
|
|
||||||
return 1; /* Interrupt */
|
|
||||||
}
|
|
||||||
/* Either the sleep wasn't long enough (need a
|
|
||||||
short loop retrying?) or not interrupted at all
|
|
||||||
(in which case we should revisit the whole thing!)
|
|
||||||
Logging some warning would be nice. assert is not
|
|
||||||
viable as under the debugger, the various dialogs
|
|
||||||
mean the condition is not true.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
#endif /* MS_WINDOWS */
|
|
||||||
if (feof(fp)) {
|
|
||||||
return -1; /* EOF */
|
|
||||||
}
|
|
||||||
#ifdef EINTR
|
|
||||||
if (errno == EINTR) {
|
|
||||||
int s;
|
|
||||||
#ifdef WITH_THREAD
|
|
||||||
PyEval_RestoreThread(_PyOS_ReadlineTState);
|
|
||||||
#endif
|
|
||||||
s = PyErr_CheckSignals();
|
|
||||||
#ifdef WITH_THREAD
|
|
||||||
PyEval_SaveThread();
|
|
||||||
#endif
|
|
||||||
if (s < 0) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (PyOS_InterruptOccurred()) {
|
if (PyOS_InterruptOccurred()) {
|
||||||
return 1; /* Interrupt */
|
return 1; /* Interrupt */
|
||||||
}
|
}
|
||||||
return -2; /* Error */
|
/* Either the sleep wasn't long enough (need a
|
||||||
|
short loop retrying?) or not interrupted at all
|
||||||
|
(in which case we should revisit the whole thing!)
|
||||||
|
Logging some warning would be nice. assert is not
|
||||||
|
viable as under the debugger, the various dialogs
|
||||||
|
mean the condition is not true.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
#endif /* MS_WINDOWS */
|
||||||
|
if (feof(fp)) {
|
||||||
|
return -1; /* EOF */
|
||||||
|
}
|
||||||
|
#ifdef EINTR
|
||||||
|
if (errno == EINTR) {
|
||||||
|
int s;
|
||||||
|
#ifdef WITH_THREAD
|
||||||
|
PyEval_RestoreThread(_PyOS_ReadlineTState);
|
||||||
|
#endif
|
||||||
|
s = PyErr_CheckSignals();
|
||||||
|
#ifdef WITH_THREAD
|
||||||
|
PyEval_SaveThread();
|
||||||
|
#endif
|
||||||
|
if (s < 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (PyOS_InterruptOccurred()) {
|
||||||
|
return 1; /* Interrupt */
|
||||||
|
}
|
||||||
|
return -2; /* Error */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue