@@ -305,6 +305,8 @@ future_add_done_callback(FutureObj *fut, PyObject *arg)
305305static PyObject *
306306future_cancel (FutureObj * fut )
307307{
308+ fut -> fut_log_tb = 0 ;
309+
308310 if (fut -> fut_state != STATE_PENDING ) {
309311 Py_RETURN_FALSE ;
310312 }
@@ -638,6 +640,17 @@ FutureObj_get_log_traceback(FutureObj *fut)
638640 }
639641}
640642
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+
641654static PyObject *
642655FutureObj_get_loop (FutureObj * fut )
643656{
@@ -882,7 +895,8 @@ static PyMethodDef FutureType_methods[] = {
882895 {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, \
883896 {"_result", (getter)FutureObj_get_result, NULL, NULL}, \
884897 {"_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}, \
886900 {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL},
887901
888902static PyGetSetDef FutureType_getsetlist [] = {
@@ -1568,6 +1582,8 @@ static PyObject *
15681582_asyncio_Task_cancel_impl (TaskObj * self )
15691583/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/
15701584{
1585+ self -> task_log_tb = 0 ;
1586+
15711587 if (self -> task_state != STATE_PENDING ) {
15721588 Py_RETURN_FALSE ;
15731589 }
0 commit comments