Lines Matching refs:chan
720 _PyChannelState *chan = PyMem_NEW(_PyChannelState, 1); in _channel_new() local
721 if (chan == NULL) { in _channel_new()
724 chan->mutex = PyThread_allocate_lock(); in _channel_new()
725 if (chan->mutex == NULL) { in _channel_new()
726 PyMem_Free(chan); in _channel_new()
731 chan->queue = _channelqueue_new(); in _channel_new()
732 if (chan->queue == NULL) { in _channel_new()
733 PyMem_Free(chan); in _channel_new()
736 chan->ends = _channelends_new(); in _channel_new()
737 if (chan->ends == NULL) { in _channel_new()
738 _channelqueue_free(chan->queue); in _channel_new()
739 PyMem_Free(chan); in _channel_new()
742 chan->open = 1; in _channel_new()
743 chan->closing = NULL; in _channel_new()
744 return chan; in _channel_new()
748 _channel_free(_PyChannelState *chan) in _channel_free() argument
750 _channel_clear_closing(chan); in _channel_free()
751 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_free()
752 _channelqueue_free(chan->queue); in _channel_free()
753 _channelends_free(chan->ends); in _channel_free()
754 PyThread_release_lock(chan->mutex); in _channel_free()
756 PyThread_free_lock(chan->mutex); in _channel_free()
757 PyMem_Free(chan); in _channel_free()
761 _channel_add(_PyChannelState *chan, int64_t interp, in _channel_add() argument
765 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_add()
767 if (!chan->open) { in _channel_add()
771 if (_channelends_associate(chan->ends, interp, 1) != 0) { in _channel_add()
775 if (_channelqueue_put(chan->queue, data) != 0) { in _channel_add()
781 PyThread_release_lock(chan->mutex); in _channel_add()
786 _channel_next(_PyChannelState *chan, int64_t interp) in _channel_next() argument
789 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_next()
791 if (!chan->open) { in _channel_next()
795 if (_channelends_associate(chan->ends, interp, 0) != 0) { in _channel_next()
799 data = _channelqueue_get(chan->queue); in _channel_next()
800 if (data == NULL && !PyErr_Occurred() && chan->closing != NULL) { in _channel_next()
801 chan->open = 0; in _channel_next()
805 PyThread_release_lock(chan->mutex); in _channel_next()
806 if (chan->queue->count == 0) { in _channel_next()
807 _channel_finish_closing(chan); in _channel_next()
813 _channel_close_interpreter(_PyChannelState *chan, int64_t interp, int end) in _channel_close_interpreter() argument
815 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_close_interpreter()
818 if (!chan->open) { in _channel_close_interpreter()
823 if (_channelends_close_interpreter(chan->ends, interp, end) != 0) { in _channel_close_interpreter()
826 chan->open = _channelends_is_open(chan->ends); in _channel_close_interpreter()
830 PyThread_release_lock(chan->mutex); in _channel_close_interpreter()
835 _channel_close_all(_PyChannelState *chan, int end, int force) in _channel_close_all() argument
838 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_close_all()
840 if (!chan->open) { in _channel_close_all()
845 if (!force && chan->queue->count > 0) { in _channel_close_all()
851 chan->open = 0; in _channel_close_all()
855 _channelends_close_all(chan->ends, end, force); in _channel_close_all()
859 PyThread_release_lock(chan->mutex); in _channel_close_all()
869 _PyChannelState *chan; member
875 _channelref_new(int64_t id, _PyChannelState *chan) in _channelref_new() argument
882 ref->chan = chan; in _channelref_new()
900 if (ref->chan != NULL) { in _channelref_free()
901 _channel_clear_closing(ref->chan); in _channelref_free()
966 _PyChannelState *chan = NULL; in _channels_lookup() local
977 if (ref->chan == NULL || !ref->chan->open) { in _channels_lookup()
987 chan = ref->chan; in _channels_lookup()
992 return chan; in _channels_lookup()
996 _channels_add(_channels *channels, _PyChannelState *chan) in _channels_add() argument
1006 _channelref *ref = _channelref_new(id, chan); in _channels_add()
1042 if (ref->chan == NULL) { in _channels_close()
1046 else if (!force && end == CHANNEL_SEND && ref->chan->closing != NULL) { in _channels_close()
1051 if (_channel_close_all(ref->chan, end, force) != 0) { in _channels_close()
1054 if (ref->chan->closing != NULL) { in _channels_close()
1066 *pchan = ref->chan; in _channels_close()
1073 *pchan = ref->chan; in _channels_close()
1076 _channel_free(ref->chan); in _channels_close()
1078 ref->chan = NULL; in _channels_close()
1100 *pchan = ref->chan; in _channels_remove_ref()
1164 _PyChannelState *chan = NULL; in _channels_drop_id_object() local
1165 _channels_remove_ref(channels, ref, prev, &chan); in _channels_drop_id_object()
1166 if (chan != NULL) { in _channels_drop_id_object()
1167 _channel_free(chan); in _channels_drop_id_object()
1209 struct _channel *chan = ref->chan; in _channel_set_closing() local
1210 if (chan == NULL) { in _channel_set_closing()
1215 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_set_closing()
1216 if (chan->closing != NULL) { in _channel_set_closing()
1220 chan->closing = PyMem_NEW(struct _channel_closing, 1); in _channel_set_closing()
1221 if (chan->closing == NULL) { in _channel_set_closing()
1224 chan->closing->ref = ref; in _channel_set_closing()
1228 PyThread_release_lock(chan->mutex); in _channel_set_closing()
1233 _channel_clear_closing(struct _channel *chan) { in _channel_clear_closing() argument
1234 PyThread_acquire_lock(chan->mutex, WAIT_LOCK); in _channel_clear_closing()
1235 if (chan->closing != NULL) { in _channel_clear_closing()
1236 PyMem_Free(chan->closing); in _channel_clear_closing()
1237 chan->closing = NULL; in _channel_clear_closing()
1239 PyThread_release_lock(chan->mutex); in _channel_clear_closing()
1243 _channel_finish_closing(struct _channel *chan) { in _channel_finish_closing() argument
1244 struct _channel_closing *closing = chan->closing; in _channel_finish_closing()
1249 _channel_clear_closing(chan); in _channel_finish_closing()
1251 ref->chan = NULL; in _channel_finish_closing()
1252 _channel_free(chan); in _channel_finish_closing()
1260 _PyChannelState *chan = _channel_new(); in _channel_create() local
1261 if (chan == NULL) { in _channel_create()
1264 int64_t id = _channels_add(channels, chan); in _channel_create()
1266 _channel_free(chan); in _channel_create()
1275 _PyChannelState *chan = NULL; in _channel_destroy() local
1276 if (_channels_remove(channels, id, &chan) != 0) { in _channel_destroy()
1279 if (chan != NULL) { in _channel_destroy()
1280 _channel_free(chan); in _channel_destroy()
1295 _PyChannelState *chan = _channels_lookup(channels, id, &mutex); in _channel_send() local
1296 if (chan == NULL) { in _channel_send()
1301 if (chan->closing != NULL) { in _channel_send()
1320 int res = _channel_add(chan, PyInterpreterState_GetID(interp), data); in _channel_send()
1341 _PyChannelState *chan = _channels_lookup(channels, id, &mutex); in _channel_recv() local
1342 if (chan == NULL) { in _channel_recv()
1348 _PyCrossInterpreterData *data = _channel_next(chan, PyInterpreterState_GetID(interp)); in _channel_recv()
1378 _PyChannelState *chan = _channels_lookup(channels, id, &mutex); in _channel_drop() local
1379 if (chan == NULL) { in _channel_drop()
1385 int res = _channel_close_interpreter(chan, PyInterpreterState_GetID(interp), send-recv); in _channel_drop()
1659 PyObject *chan = PyObject_CallFunctionObjArgs(cls, cid, NULL); in _channel_from_cid() local
1661 if (chan == NULL) { in _channel_from_cid()
1664 return chan; in _channel_from_cid()
1688 PyObject *chan = _channel_from_cid(cid, xid->end); in _channelid_from_xid() local
1689 if (chan == NULL) { in _channelid_from_xid()
1694 return chan; in _channelid_from_xid()