Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
7ce1c6fb
Kaydet (Commit)
7ce1c6fb
authored
Haz 11, 2017
tarafından
Yury Selivanov
Kaydeden (comit)
GitHub
Haz 11, 2017
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
bpo-30508: Don't log exceptions if Task/Future "cancel()" method called (#2050)
üst
36ff451e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
49 additions
and
1 deletion
+49
-1
futures.py
Lib/asyncio/futures.py
+1
-0
tasks.py
Lib/asyncio/tasks.py
+1
-0
test_futures.py
Lib/test/test_asyncio/test_futures.py
+8
-0
test_tasks.py
Lib/test/test_asyncio/test_tasks.py
+19
-0
NEWS
Misc/NEWS
+3
-0
_asynciomodule.c
Modules/_asynciomodule.c
+17
-1
No files found.
Lib/asyncio/futures.py
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -107,6 +107,7 @@ class Future:
change the future's state to cancelled, schedule the callbacks and
return True.
"""
self
.
_log_traceback
=
False
if
self
.
_state
!=
_PENDING
:
return
False
self
.
_state
=
_CANCELLED
...
...
Lib/asyncio/tasks.py
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -144,6 +144,7 @@ class Task(futures.Future):
terminates with a CancelledError exception (even if cancel()
was not called).
"""
self
.
_log_traceback
=
False
if
self
.
done
():
return
False
if
self
.
_fut_waiter
is
not
None
:
...
...
Lib/test/test_asyncio/test_futures.py
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -318,6 +318,14 @@ class BaseFutureTests:
del
fut
self
.
assertFalse
(
m_log
.
error
.
called
)
@mock.patch
(
'asyncio.base_events.logger'
)
def
test_tb_logger_not_called_after_cancel
(
self
,
m_log
):
fut
=
self
.
_new_future
(
loop
=
self
.
loop
)
fut
.
set_exception
(
Exception
())
fut
.
cancel
()
del
fut
self
.
assertFalse
(
m_log
.
error
.
called
)
@mock.patch
(
'asyncio.base_events.logger'
)
def
test_tb_logger_result_unretrieved
(
self
,
m_log
):
fut
=
self
.
_new_future
(
loop
=
self
.
loop
)
...
...
Lib/test/test_asyncio/test_tasks.py
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -1864,6 +1864,25 @@ class BaseTaskTests:
})
mock_handler
.
reset_mock
()
@mock.patch
(
'asyncio.base_events.logger'
)
def
test_tb_logger_not_called_after_cancel
(
self
,
m_log
):
loop
=
asyncio
.
new_event_loop
()
self
.
set_event_loop
(
loop
)
@asyncio.coroutine
def
coro
():
raise
TypeError
@asyncio.coroutine
def
runner
():
task
=
self
.
new_task
(
loop
,
coro
())
yield
from
asyncio
.
sleep
(
0.05
,
loop
=
loop
)
task
.
cancel
()
task
=
None
loop
.
run_until_complete
(
runner
())
self
.
assertFalse
(
m_log
.
error
.
called
)
@mock.patch
(
'asyncio.coroutines.logger'
)
def
test_coroutine_never_yielded
(
self
,
m_log
):
with
set_coroutine_debug
(
True
):
...
...
Misc/NEWS
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -359,6 +359,9 @@ Extension Modules
Library
-------
- bpo-30508: Don'
t
log
exceptions
if
Task
/
Future
"cancel()"
method
was
called
.
-
bpo
-
11822
:
The
dis
.
dis
()
function
now
is
able
to
disassemble
nested
code
objects
.
...
...
Modules/_asynciomodule.c
Dosyayı görüntüle @
7ce1c6fb
...
...
@@ -306,6 +306,8 @@ future_add_done_callback(FutureObj *fut, PyObject *arg)
static
PyObject
*
future_cancel
(
FutureObj
*
fut
)
{
fut
->
fut_log_tb
=
0
;
if
(
fut
->
fut_state
!=
STATE_PENDING
)
{
Py_RETURN_FALSE
;
}
...
...
@@ -639,6 +641,17 @@ FutureObj_get_log_traceback(FutureObj *fut)
}
}
static
int
FutureObj_set_log_traceback
(
FutureObj
*
fut
,
PyObject
*
val
)
{
int
is_true
=
PyObject_IsTrue
(
val
);
if
(
is_true
<
0
)
{
return
-
1
;
}
fut
->
fut_log_tb
=
is_true
;
return
0
;
}
static
PyObject
*
FutureObj_get_loop
(
FutureObj
*
fut
)
{
...
...
@@ -883,7 +896,8 @@ static PyMethodDef FutureType_methods[] = {
{"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, \
{"_result", (getter)FutureObj_get_result, NULL, NULL}, \
{"_exception", (getter)FutureObj_get_exception, NULL, NULL}, \
{"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, \
{"_log_traceback", (getter)FutureObj_get_log_traceback, \
(setter)FutureObj_set_log_traceback, NULL}, \
{"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL},
static
PyGetSetDef
FutureType_getsetlist
[]
=
{
...
...
@@ -1569,6 +1583,8 @@ static PyObject *
_asyncio_Task_cancel_impl
(
TaskObj
*
self
)
/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/
{
self
->
task_log_tb
=
0
;
if
(
self
->
task_state
!=
STATE_PENDING
)
{
Py_RETURN_FALSE
;
}
...
...
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