Lines Matching defs:fut

84     FutureObj_HEAD(fut)
204 get_future_loop(PyObject *fut)
212 if (Future_CheckExact(fut) || Task_CheckExact(fut)) {
213 PyObject *loop = ((FutureObj *)fut)->fut_loop;
218 if (_PyObject_LookupAttrId(fut, &PyId_get_loop, &getloop) < 0) {
227 return _PyObject_GetAttrId(fut, &PyId__loop);
394 future_is_alive(FutureObj *fut)
396 return fut->fut_loop != NULL;
401 future_ensure_alive(FutureObj *fut)
403 if (!future_is_alive(fut)) {
412 #define ENSURE_FUTURE_ALIVE(fut) \
414 assert(Future_Check(fut) || Task_Check(fut)); \
415 if (future_ensure_alive((FutureObj*)fut)) { \
422 future_schedule_callbacks(FutureObj *fut)
427 if (fut->fut_callback0 != NULL) {
431 fut->fut_loop, fut->fut_callback0,
432 (PyObject *)fut, fut->fut_context0);
434 Py_CLEAR(fut->fut_callback0);
435 Py_CLEAR(fut->fut_context0);
439 Py_CLEAR(fut->fut_callbacks);
447 if (fut->fut_callbacks == NULL) {
452 len = PyList_GET_SIZE(fut->fut_callbacks);
455 Py_CLEAR(fut->fut_callbacks);
460 PyObject *cb_tup = PyList_GET_ITEM(fut->fut_callbacks, i);
464 if (call_soon(fut->fut_loop, cb, (PyObject *)fut, ctx)) {
467 Py_CLEAR(fut->fut_callbacks);
472 Py_CLEAR(fut->fut_callbacks);
478 future_init(FutureObj *fut, PyObject *loop)
484 // Same to FutureObj_clear() but not clearing fut->dict
485 Py_CLEAR(fut->fut_loop);
486 Py_CLEAR(fut->fut_callback0);
487 Py_CLEAR(fut->fut_context0);
488 Py_CLEAR(fut->fut_callbacks);
489 Py_CLEAR(fut->fut_result);
490 Py_CLEAR(fut->fut_exception);
491 Py_CLEAR(fut->fut_exception_tb);
492 Py_CLEAR(fut->fut_source_tb);
493 Py_CLEAR(fut->fut_cancel_msg);
494 Py_CLEAR(fut->fut_cancelled_exc);
496 fut->fut_state = STATE_PENDING;
497 fut->fut_log_tb = 0;
498 fut->fut_blocking = 0;
509 fut->fut_loop = loop;
511 res = _PyObject_CallMethodIdNoArgs(fut->fut_loop, &PyId_get_debug);
527 fut->fut_source_tb = PyObject_CallNoArgs(traceback_extract_stack);
528 if (fut->fut_source_tb == NULL) {
537 future_set_result(FutureObj *fut, PyObject *res)
539 if (future_ensure_alive(fut)) {
543 if (fut->fut_state != STATE_PENDING) {
548 assert(!fut->fut_result);
550 fut->fut_result = res;
551 fut->fut_state = STATE_FINISHED;
553 if (future_schedule_callbacks(fut) == -1) {
560 future_set_exception(FutureObj *fut, PyObject *exc)
564 if (fut->fut_state != STATE_PENDING) {
574 if (fut->fut_state != STATE_PENDING) {
597 assert(!fut->fut_exception);
598 assert(!fut->fut_exception_tb);
599 fut->fut_exception = exc_val;
600 fut->fut_exception_tb = PyException_GetTraceback(exc_val);
601 fut->fut_state = STATE_FINISHED;
603 if (future_schedule_callbacks(fut) == -1) {
607 fut->fut_log_tb = 1;
612 create_cancelled_error(FutureObj *fut)
615 if (fut->fut_cancelled_exc != NULL) {
617 exc = fut->fut_cancelled_exc;
618 fut->fut_cancelled_exc = NULL;
621 PyObject *msg = fut->fut_cancel_msg;
631 future_set_cancelled_error(FutureObj *fut)
633 PyObject *exc = create_cancelled_error(fut);
642 future_get_result(FutureObj *fut, PyObject **result)
644 if (fut->fut_state == STATE_CANCELLED) {
645 future_set_cancelled_error(fut);
649 if (fut->fut_state != STATE_FINISHED) {
654 fut->fut_log_tb = 0;
655 if (fut->fut_exception != NULL) {
656 PyObject *tb = fut->fut_exception_tb;
660 if (PyException_SetTraceback(fut->fut_exception, tb) < 0) {
663 Py_INCREF(fut->fut_exception);
664 *result = fut->fut_exception;
665 Py_CLEAR(fut->fut_exception_tb);
669 Py_INCREF(fut->fut_result);
670 *result = fut->fut_result;
675 future_add_done_callback(FutureObj *fut, PyObject *arg, PyObject *ctx)
677 if (!future_is_alive(fut)) {
682 if (fut->fut_state != STATE_PENDING) {
685 if (call_soon(fut->fut_loop, arg, (PyObject*) fut, ctx)) {
711 if (fut->fut_callbacks == NULL && fut->fut_callback0 == NULL) {
713 fut->fut_callback0 = arg;
715 fut->fut_context0 = ctx;
727 if (fut->fut_callbacks != NULL) {
728 int err = PyList_Append(fut->fut_callbacks, tup);
736 fut->fut_callbacks = PyList_New(1);
737 if (fut->fut_callbacks == NULL) {
742 PyList_SET_ITEM(fut->fut_callbacks, 0, tup); /* borrow */
751 future_cancel(FutureObj *fut, PyObject *msg)
753 fut->fut_log_tb = 0;
755 if (fut->fut_state != STATE_PENDING) {
758 fut->fut_state = STATE_CANCELLED;
761 Py_XSETREF(fut->fut_cancel_msg, msg);
763 if (future_schedule_callbacks(fut) == -1) {
799 FutureObj_clear(FutureObj *fut)
801 Py_CLEAR(fut->fut_loop);
802 Py_CLEAR(fut->fut_callback0);
803 Py_CLEAR(fut->fut_context0);
804 Py_CLEAR(fut->fut_callbacks);
805 Py_CLEAR(fut->fut_result);
806 Py_CLEAR(fut->fut_exception);
807 Py_CLEAR(fut->fut_exception_tb);
808 Py_CLEAR(fut->fut_source_tb);
809 Py_CLEAR(fut->fut_cancel_msg);
810 Py_CLEAR(fut->fut_cancelled_exc);
811 Py_CLEAR(fut->dict);
816 FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg)
818 Py_VISIT(fut->fut_loop);
819 Py_VISIT(fut->fut_callback0);
820 Py_VISIT(fut->fut_context0);
821 Py_VISIT(fut->fut_callbacks);
822 Py_VISIT(fut->fut_result);
823 Py_VISIT(fut->fut_exception);
824 Py_VISIT(fut->fut_exception_tb);
825 Py_VISIT(fut->fut_source_tb);
826 Py_VISIT(fut->fut_cancel_msg);
827 Py_VISIT(fut->fut_cancelled_exc);
828 Py_VISIT(fut->dict);
1171 FutureObj_get_blocking(FutureObj *fut, void *Py_UNUSED(ignored))
1173 if (future_is_alive(fut) && fut->fut_blocking) {
1182 FutureObj_set_blocking(FutureObj *fut, PyObject *val, void *Py_UNUSED(ignored))
1184 if (future_ensure_alive(fut)) {
1196 fut->fut_blocking = is_true;
1201 FutureObj_get_log_traceback(FutureObj *fut, void *Py_UNUSED(ignored))
1203 ENSURE_FUTURE_ALIVE(fut)
1204 if (fut->fut_log_tb) {
1213 FutureObj_set_log_traceback(FutureObj *fut, PyObject *val, void *Py_UNUSED(ignored))
1228 fut->fut_log_tb = is_true;
1233 FutureObj_get_loop(FutureObj *fut, void *Py_UNUSED(ignored))
1235 if (!future_is_alive(fut)) {
1238 Py_INCREF(fut->fut_loop);
1239 return fut->fut_loop;
1243 FutureObj_get_callbacks(FutureObj *fut, void *Py_UNUSED(ignored))
1247 ENSURE_FUTURE_ALIVE(fut)
1249 if (fut->fut_callback0 == NULL) {
1250 if (fut->fut_callbacks == NULL) {
1254 Py_INCREF(fut->fut_callbacks);
1255 return fut->fut_callbacks;
1259 if (fut->fut_callbacks != NULL) {
1260 len += PyList_GET_SIZE(fut->fut_callbacks);
1275 Py_INCREF(fut->fut_callback0);
1276 PyTuple_SET_ITEM(tup0, 0, fut->fut_callback0);
1277 assert(fut->fut_context0 != NULL);
1278 Py_INCREF(fut->fut_context0);
1279 PyTuple_SET_ITEM(tup0, 1, (PyObject *)fut->fut_context0);
1283 if (fut->fut_callbacks != NULL) {
1284 for (i = 0; i < PyList_GET_SIZE(fut->fut_callbacks); i++) {
1285 PyObject *cb = PyList_GET_ITEM(fut->fut_callbacks, i);
1295 FutureObj_get_result(FutureObj *fut, void *Py_UNUSED(ignored))
1297 ENSURE_FUTURE_ALIVE(fut)
1298 if (fut->fut_result == NULL) {
1301 Py_INCREF(fut->fut_result);
1302 return fut->fut_result;
1306 FutureObj_get_exception(FutureObj *fut, void *Py_UNUSED(ignored))
1308 ENSURE_FUTURE_ALIVE(fut)
1309 if (fut->fut_exception == NULL) {
1312 Py_INCREF(fut->fut_exception);
1313 return fut->fut_exception;
1317 FutureObj_get_source_traceback(FutureObj *fut, void *Py_UNUSED(ignored))
1319 if (!future_is_alive(fut) || fut->fut_source_tb == NULL) {
1322 Py_INCREF(fut->fut_source_tb);
1323 return fut->fut_source_tb;
1327 FutureObj_get_cancel_message(FutureObj *fut, void *Py_UNUSED(ignored))
1329 if (fut->fut_cancel_msg == NULL) {
1332 Py_INCREF(fut->fut_cancel_msg);
1333 return fut->fut_cancel_msg;
1337 FutureObj_set_cancel_message(FutureObj *fut, PyObject *msg,
1345 Py_XSETREF(fut->fut_cancel_msg, msg);
1350 FutureObj_get_state(FutureObj *fut, void *Py_UNUSED(ignored))
1357 ENSURE_FUTURE_ALIVE(fut)
1359 switch (fut->fut_state) {
1377 FutureObj_repr(FutureObj *fut)
1379 ENSURE_FUTURE_ALIVE(fut)
1380 return PyObject_CallOneArg(asyncio_future_repr_func, (PyObject *)fut);
1400 FutureObj_finalize(FutureObj *fut)
1413 if (!fut->fut_log_tb) {
1416 assert(fut->fut_exception != NULL);
1417 fut->fut_log_tb = 0;
1428 "%s exception was never retrieved", _PyType_Name(Py_TYPE(fut)));
1434 _PyDict_SetItemId(context, &PyId_exception, fut->fut_exception) < 0 ||
1435 _PyDict_SetItemId(context, &PyId_future, (PyObject*)fut) < 0) {
1438 if (fut->fut_source_tb != NULL) {
1440 fut->fut_source_tb) < 0) {
1445 func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler);
1534 FutureObj *fut = (FutureObj *)self;
1536 if (Future_CheckExact(fut)) {
1537 /* When fut is subclass of Future, finalizer is called from
1548 if (fut->fut_weakreflist != NULL) {
1552 (void)FutureObj_clear(fut);
1553 Py_TYPE(fut)->tp_free(fut);
1594 FutureObj *fut = it->future;
1597 if (fut == NULL) {
1601 if (fut->fut_state == STATE_PENDING) {
1602 if (!fut->fut_blocking) {
1603 fut->fut_blocking = 1;
1604 Py_INCREF(fut);
1605 *result = (PyObject *)fut;
1614 res = _asyncio_Future_result_impl(fut);
1616 Py_DECREF(fut);
1621 Py_DECREF(fut);
1763 future_new_iter(PyObject *fut)
1767 if (!PyObject_TypeCheck(fut, &FutureType)) {
1772 ENSURE_FUTURE_ALIVE(fut)
1788 Py_INCREF(fut);
1789 it->future = (FutureObj*)fut;
2161 FutureObj *fut = (FutureObj*)self;
2162 return _asyncio_Future__make_cancelled_error_impl(fut);
2551 /* When fut is subclass of Task, finalizer is called from
2738 FutureObj *fut = (FutureObj*)task;
2740 fut->fut_cancelled_exc = ev;
2742 return future_cancel(fut, NULL);
2788 FutureObj *fut = (FutureObj*)result;
2791 if (fut->fut_loop != task->task_loop) {
2795 if (!fut->fut_blocking) {
2799 fut->fut_blocking = 0;