@@ -305,6 +305,8 @@ future_add_done_callback(FutureObj *fut, PyObject *arg)
305
305
static PyObject *
306
306
future_cancel (FutureObj * fut )
307
307
{
308
+ fut -> fut_log_tb = 0 ;
309
+
308
310
if (fut -> fut_state != STATE_PENDING ) {
309
311
Py_RETURN_FALSE ;
310
312
}
@@ -638,6 +640,17 @@ FutureObj_get_log_traceback(FutureObj *fut)
638
640
}
639
641
}
640
642
643
+ static int
644
+ FutureObj_set_log_traceback (FutureObj * fut , PyObject * val )
645
+ {
646
+ int is_true = PyObject_IsTrue (val );
647
+ if (is_true < 0 ) {
648
+ return -1 ;
649
+ }
650
+ fut -> fut_log_tb = is_true ;
651
+ return 0 ;
652
+ }
653
+
641
654
static PyObject *
642
655
FutureObj_get_loop (FutureObj * fut )
643
656
{
@@ -882,7 +895,8 @@ static PyMethodDef FutureType_methods[] = {
882
895
{"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, \
883
896
{"_result", (getter)FutureObj_get_result, NULL, NULL}, \
884
897
{"_exception", (getter)FutureObj_get_exception, NULL, NULL}, \
885
- {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, \
898
+ {"_log_traceback", (getter)FutureObj_get_log_traceback, \
899
+ (setter)FutureObj_set_log_traceback, NULL}, \
886
900
{"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL},
887
901
888
902
static PyGetSetDef FutureType_getsetlist [] = {
@@ -1568,6 +1582,8 @@ static PyObject *
1568
1582
_asyncio_Task_cancel_impl (TaskObj * self )
1569
1583
/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/
1570
1584
{
1585
+ self -> task_log_tb = 0 ;
1586
+
1571
1587
if (self -> task_state != STATE_PENDING ) {
1572
1588
Py_RETURN_FALSE ;
1573
1589
}
0 commit comments