@@ -306,6 +306,8 @@ future_add_done_callback(FutureObj *fut, PyObject *arg)
306306static PyObject *
307307future_cancel (FutureObj * fut )
308308{
309+ fut -> fut_log_tb = 0 ;
310+
309311 if (fut -> fut_state != STATE_PENDING ) {
310312 Py_RETURN_FALSE ;
311313 }
@@ -639,6 +641,17 @@ FutureObj_get_log_traceback(FutureObj *fut)
639641 }
640642}
641643
644+ static int
645+ FutureObj_set_log_traceback (FutureObj * fut , PyObject * val )
646+ {
647+ int is_true = PyObject_IsTrue (val );
648+ if (is_true < 0 ) {
649+ return -1 ;
650+ }
651+ fut -> fut_log_tb = is_true ;
652+ return 0 ;
653+ }
654+
642655static PyObject *
643656FutureObj_get_loop (FutureObj * fut )
644657{
@@ -883,7 +896,8 @@ static PyMethodDef FutureType_methods[] = {
883896 {"_callbacks", (getter)FutureObj_get_callbacks, NULL, NULL}, \
884897 {"_result", (getter)FutureObj_get_result, NULL, NULL}, \
885898 {"_exception", (getter)FutureObj_get_exception, NULL, NULL}, \
886- {"_log_traceback", (getter)FutureObj_get_log_traceback, NULL, NULL}, \
899+ {"_log_traceback", (getter)FutureObj_get_log_traceback, \
900+ (setter)FutureObj_set_log_traceback, NULL}, \
887901 {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL},
888902
889903static PyGetSetDef FutureType_getsetlist [] = {
@@ -1569,6 +1583,8 @@ static PyObject *
15691583_asyncio_Task_cancel_impl (TaskObj * self )
15701584/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/
15711585{
1586+ self -> task_log_tb = 0 ;
1587+
15721588 if (self -> task_state != STATE_PENDING ) {
15731589 Py_RETURN_FALSE ;
15741590 }
0 commit comments