Lines Matching refs:chan

726     _PyChannelState *chan = PyMem_NEW(_PyChannelState, 1);
727 if (chan == NULL) {
730 chan->mutex = PyThread_allocate_lock();
731 if (chan->mutex == NULL) {
732 PyMem_Free(chan);
737 chan->queue = _channelqueue_new();
738 if (chan->queue == NULL) {
739 PyMem_Free(chan);
742 chan->ends = _channelends_new();
743 if (chan->ends == NULL) {
744 _channelqueue_free(chan->queue);
745 PyMem_Free(chan);
748 chan->open = 1;
749 chan->closing = NULL;
750 return chan;
754 _channel_free(_PyChannelState *chan)
756 _channel_clear_closing(chan);
757 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
758 _channelqueue_free(chan->queue);
759 _channelends_free(chan->ends);
760 PyThread_release_lock(chan->mutex);
762 PyThread_free_lock(chan->mutex);
763 PyMem_Free(chan);
767 _channel_add(_PyChannelState *chan, int64_t interp,
771 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
773 if (!chan->open) {
777 if (_channelends_associate(chan->ends, interp, 1) != 0) {
781 if (_channelqueue_put(chan->queue, data) != 0) {
787 PyThread_release_lock(chan->mutex);
792 _channel_next(_PyChannelState *chan, int64_t interp)
795 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
797 if (!chan->open) {
801 if (_channelends_associate(chan->ends, interp, 0) != 0) {
805 data = _channelqueue_get(chan->queue);
806 if (data == NULL && !PyErr_Occurred() && chan->closing != NULL) {
807 chan->open = 0;
811 PyThread_release_lock(chan->mutex);
812 if (chan->queue->count == 0) {
813 _channel_finish_closing(chan);
819 _channel_close_interpreter(_PyChannelState *chan, int64_t interp, int end)
821 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
824 if (!chan->open) {
829 if (_channelends_close_interpreter(chan->ends, interp, end) != 0) {
832 chan->open = _channelends_is_open(chan->ends);
836 PyThread_release_lock(chan->mutex);
841 _channel_close_all(_PyChannelState *chan, int end, int force)
844 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
846 if (!chan->open) {
851 if (!force && chan->queue->count > 0) {
857 chan->open = 0;
861 _channelends_close_all(chan->ends, end, force);
865 PyThread_release_lock(chan->mutex);
875 _PyChannelState *chan;
881 _channelref_new(int64_t id, _PyChannelState *chan)
888 ref->chan = chan;
898 // ref->chan = NULL;
906 if (ref->chan != NULL) {
907 _channel_clear_closing(ref->chan);
972 _PyChannelState *chan = NULL;
983 if (ref->chan == NULL || !ref->chan->open) {
993 chan = ref->chan;
998 return chan;
1002 _channels_add(_channels *channels, _PyChannelState *chan)
1012 _channelref *ref = _channelref_new(id, chan);
1048 if (ref->chan == NULL) {
1052 else if (!force && end == CHANNEL_SEND && ref->chan->closing != NULL) {
1057 if (_channel_close_all(ref->chan, end, force) != 0) {
1060 if (ref->chan->closing != NULL) {
1072 *pchan = ref->chan;
1079 *pchan = ref->chan;
1082 _channel_free(ref->chan);
1084 ref->chan = NULL;
1106 *pchan = ref->chan;
1170 _PyChannelState *chan = NULL;
1171 _channels_remove_ref(channels, ref, prev, &chan);
1172 if (chan != NULL) {
1173 _channel_free(chan);
1210 struct _channel *chan = ref->chan;
1211 if (chan == NULL) {
1216 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
1217 if (chan->closing != NULL) {
1221 chan->closing = PyMem_NEW(struct _channel_closing, 1);
1222 if (chan->closing == NULL) {
1225 chan->closing->ref = ref;
1229 PyThread_release_lock(chan->mutex);
1234 _channel_clear_closing(struct _channel *chan) {
1235 PyThread_acquire_lock(chan->mutex, WAIT_LOCK);
1236 if (chan->closing != NULL) {
1237 PyMem_Free(chan->closing);
1238 chan->closing = NULL;
1240 PyThread_release_lock(chan->mutex);
1244 _channel_finish_closing(struct _channel *chan) {
1245 struct _channel_closing *closing = chan->closing;
1250 _channel_clear_closing(chan);
1252 ref->chan = NULL;
1253 _channel_free(chan);
1261 _PyChannelState *chan = _channel_new();
1262 if (chan == NULL) {
1265 int64_t id = _channels_add(channels, chan);
1267 _channel_free(chan);
1276 _PyChannelState *chan = NULL;
1277 if (_channels_remove(channels, id, &chan) != 0) {
1280 if (chan != NULL) {
1281 _channel_free(chan);
1296 _PyChannelState *chan = _channels_lookup(channels, id, &mutex);
1297 if (chan == NULL) {
1302 if (chan->closing != NULL) {
1321 int res = _channel_add(chan, PyInterpreterState_GetID(interp), data);
1342 _PyChannelState *chan = _channels_lookup(channels, id, &mutex);
1343 if (chan == NULL) {
1349 _PyCrossInterpreterData *data = _channel_next(chan, PyInterpreterState_GetID(interp));
1376 _PyChannelState *chan = _channels_lookup(channels, id, &mutex);
1377 if (chan == NULL) {
1383 int res = _channel_close_interpreter(chan, PyInterpreterState_GetID(interp), send-recv);
1398 _PyChannelState *chan = _channels_lookup(channels, cid, NULL);
1399 if (chan == NULL) {
1401 } else if (send && chan->closing != NULL) {
1406 _channelend *end = _channelend_find(send ? chan->ends->send : chan->ends->recv,
1675 PyObject *chan = PyObject_CallFunctionObjArgs(cls, cid, NULL);
1677 if (chan == NULL) {
1680 return chan;
1704 PyObject *chan = _channel_from_cid(cid, xid->end);
1705 if (chan == NULL) {
1710 return chan;