Lines Matching +full:open +full:- +full:pull +full:- +full:requests +full:- +full:limit
88 stream->read_cb = NULL; in uv__stream_init()
89 stream->alloc_cb = NULL; in uv__stream_init()
90 stream->close_cb = NULL; in uv__stream_init()
91 stream->connection_cb = NULL; in uv__stream_init()
92 stream->connect_req = NULL; in uv__stream_init()
93 stream->shutdown_req = NULL; in uv__stream_init()
94 stream->accepted_fd = -1; in uv__stream_init()
95 stream->queued_fds = NULL; in uv__stream_init()
96 stream->delayed_error = 0; in uv__stream_init()
97 uv__queue_init(&stream->write_queue); in uv__stream_init()
98 uv__queue_init(&stream->write_completed_queue); in uv__stream_init()
99 stream->write_queue_size = 0; in uv__stream_init()
101 if (loop->emfile_fd == -1) { in uv__stream_init()
104 /* In the rare case that "/dev/null" isn't mounted open "/" in uv__stream_init()
109 loop->emfile_fd = err; in uv__stream_init()
113 stream->select = NULL; in uv__stream_init()
116 uv__io_init(&stream->io_watcher, uv__stream_io, -1); in uv__stream_init()
126 s = stream->select; in uv__stream_osx_interrupt_select()
135 r = write(s->fake_fd, "x", 1); in uv__stream_osx_interrupt_select()
136 while (r == -1 && errno == EINTR); in uv__stream_osx_interrupt_select()
140 /* No-op on any other platform */ in uv__stream_osx_interrupt_select()
156 s = stream->select; in uv__stream_osx_select()
157 fd = s->fd; in uv__stream_osx_select()
159 if (fd > s->int_fd) in uv__stream_osx_select()
162 max_fd = s->int_fd; in uv__stream_osx_select()
166 if (uv_sem_trywait(&s->close_sem) == 0) in uv__stream_osx_select()
170 memset(s->sread, 0, s->sread_sz); in uv__stream_osx_select()
171 memset(s->swrite, 0, s->swrite_sz); in uv__stream_osx_select()
173 if (uv__io_active(&stream->io_watcher, POLLIN)) in uv__stream_osx_select()
174 FD_SET(fd, s->sread); in uv__stream_osx_select()
175 if (uv__io_active(&stream->io_watcher, POLLOUT)) in uv__stream_osx_select()
176 FD_SET(fd, s->swrite); in uv__stream_osx_select()
177 FD_SET(s->int_fd, s->sread); in uv__stream_osx_select()
180 r = select(max_fd + 1, s->sread, s->swrite, NULL, NULL); in uv__stream_osx_select()
181 if (r == -1) { in uv__stream_osx_select()
194 if (FD_ISSET(s->int_fd, s->sread)) in uv__stream_osx_select()
196 r = read(s->int_fd, buf, sizeof(buf)); in uv__stream_osx_select()
201 if (r != -1) in uv__stream_osx_select()
215 if (FD_ISSET(fd, s->sread)) in uv__stream_osx_select()
217 if (FD_ISSET(fd, s->swrite)) in uv__stream_osx_select()
220 assert(events != 0 || FD_ISSET(s->int_fd, s->sread)); in uv__stream_osx_select()
222 ACCESS_ONCE(int, s->events) = events; in uv__stream_osx_select()
224 uv_async_send(&s->async); in uv__stream_osx_select()
225 uv_sem_wait(&s->async_sem); in uv__stream_osx_select()
228 assert((s->events == 0) || (stream->flags & UV_HANDLE_CLOSING)); in uv__stream_osx_select()
240 stream = s->stream; in uv__stream_osx_select_cb()
243 events = s->events; in uv__stream_osx_select_cb()
244 ACCESS_ONCE(int, s->events) = 0; in uv__stream_osx_select_cb()
249 /* Invoke callback on event-loop */ in uv__stream_osx_select_cb()
250 if ((events & POLLIN) && uv__io_active(&stream->io_watcher, POLLIN)) in uv__stream_osx_select_cb()
251 uv__stream_io(stream->loop, &stream->io_watcher, POLLIN); in uv__stream_osx_select_cb()
253 if ((events & POLLOUT) && uv__io_active(&stream->io_watcher, POLLOUT)) in uv__stream_osx_select_cb()
254 uv__stream_io(stream->loop, &stream->io_watcher, POLLOUT); in uv__stream_osx_select_cb()
256 if (stream->flags & UV_HANDLE_CLOSING) in uv__stream_osx_select_cb()
262 uv_sem_post(&s->async_sem); in uv__stream_osx_select_cb()
294 if (kq == -1) { in uv__stream_try_select()
307 while (ret == -1 && errno == EINTR); in uv__stream_try_select()
311 if (ret == -1) in uv__stream_try_select()
339 s->events = 0; in uv__stream_try_select()
340 s->fd = *fd; in uv__stream_try_select()
341 s->sread = (fd_set*) ((char*) s + sizeof(*s)); in uv__stream_try_select()
342 s->sread_sz = sread_sz; in uv__stream_try_select()
343 s->swrite = (fd_set*) ((char*) s->sread + sread_sz); in uv__stream_try_select()
344 s->swrite_sz = swrite_sz; in uv__stream_try_select()
346 err = uv_async_init(stream->loop, &s->async, uv__stream_osx_select_cb); in uv__stream_try_select()
350 s->async.flags |= UV_HANDLE_INTERNAL; in uv__stream_try_select()
351 uv__handle_unref(&s->async); in uv__stream_try_select()
353 err = uv_sem_init(&s->close_sem, 0); in uv__stream_try_select()
357 err = uv_sem_init(&s->async_sem, 0); in uv__stream_try_select()
361 s->fake_fd = fds[0]; in uv__stream_try_select()
362 s->int_fd = fds[1]; in uv__stream_try_select()
365 s->stream = stream; in uv__stream_try_select()
366 stream->select = s; in uv__stream_try_select()
367 *fd = s->fake_fd; in uv__stream_try_select()
369 err = uv_thread_create(&s->thread, uv__stream_osx_select, stream); in uv__stream_try_select()
376 s->stream = NULL; in uv__stream_try_select()
377 stream->select = NULL; in uv__stream_try_select()
380 uv_sem_destroy(&s->async_sem); in uv__stream_try_select()
383 uv_sem_destroy(&s->close_sem); in uv__stream_try_select()
388 uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); in uv__stream_try_select()
408 if (!(stream->io_watcher.fd == -1 || stream->io_watcher.fd == fd)) in uv__stream_open()
412 stream->flags |= flags; in uv__stream_open()
414 if (stream->type == UV_TCP) { in uv__stream_open()
415 if ((stream->flags & UV_HANDLE_TCP_NODELAY) && uv__tcp_nodelay(fd, 1)) in uv__stream_open()
419 if ((stream->flags & UV_HANDLE_TCP_KEEPALIVE) && in uv__stream_open()
434 stream->io_watcher.fd = fd; in uv__stream_open()
443 while (!uv__queue_empty(&stream->write_queue)) { in uv__stream_flush_write_queue()
444 q = uv__queue_head(&stream->write_queue); in uv__stream_flush_write_queue()
448 req->error = error; in uv__stream_flush_write_queue()
450 uv__queue_insert_tail(&stream->write_completed_queue, &req->queue); in uv__stream_flush_write_queue()
456 assert(!uv__io_active(&stream->io_watcher, POLLIN | POLLOUT)); in uv__stream_destroy()
457 assert(stream->flags & UV_HANDLE_CLOSED); in uv__stream_destroy()
459 if (stream->connect_req) { in uv__stream_destroy()
460 uv__req_unregister(stream->loop, stream->connect_req); in uv__stream_destroy()
461 stream->connect_req->cb(stream->connect_req, UV_ECANCELED); in uv__stream_destroy()
462 stream->connect_req = NULL; in uv__stream_destroy()
469 assert(stream->write_queue_size == 0); in uv__stream_destroy()
475 * the EMFILE limit. Next, we accept all pending connections and close them
476 * immediately to signal the clients that we're overloaded - and we are, but
479 * There is one caveat: it's not reliable in a multi-threaded environment.
480 * The file descriptor limit is per process. Our party trick fails if another
488 if (loop->emfile_fd == -1) in uv__emfile_trick()
491 uv__close(loop->emfile_fd); in uv__emfile_trick()
492 loop->emfile_fd = -1; in uv__emfile_trick()
502 loop->emfile_fd = emfile_fd; in uv__emfile_trick()
515 assert(stream->accepted_fd == -1); in uv__server_io()
516 assert(!(stream->flags & UV_HANDLE_CLOSING)); in uv__server_io()
527 stream->accepted_fd = err; in uv__server_io()
528 stream->connection_cb(stream, 0); in uv__server_io()
530 if (stream->accepted_fd != -1) in uv__server_io()
532 uv__io_stop(loop, &stream->io_watcher, POLLIN); in uv__server_io()
539 assert(server->loop == client->loop); in uv_accept()
541 if (server->accepted_fd == -1) in uv_accept()
544 switch (client->type) { in uv_accept()
548 server->accepted_fd, in uv_accept()
552 uv__close(server->accepted_fd); in uv_accept()
558 err = uv_udp_open((uv_udp_t*) client, server->accepted_fd); in uv_accept()
560 uv__close(server->accepted_fd); in uv_accept()
569 client->flags |= UV_HANDLE_BOUND; in uv_accept()
573 if (server->queued_fds != NULL) { in uv_accept()
576 queued_fds = server->queued_fds; in uv_accept()
579 server->accepted_fd = queued_fds->fds[0]; in uv_accept()
582 assert(queued_fds->offset > 0); in uv_accept()
583 if (--queued_fds->offset == 0) { in uv_accept()
585 server->queued_fds = NULL; in uv_accept()
588 memmove(queued_fds->fds, in uv_accept()
589 queued_fds->fds + 1, in uv_accept()
590 queued_fds->offset * sizeof(*queued_fds->fds)); in uv_accept()
593 server->accepted_fd = -1; in uv_accept()
595 uv__io_start(server->loop, &server->io_watcher, POLLIN); in uv_accept()
606 switch (stream->type) { in uv_listen()
630 assert(uv__queue_empty(&stream->write_queue)); in uv__drain()
631 if (!(stream->flags & UV_HANDLE_CLOSING)) { in uv__drain()
632 uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); in uv__drain()
639 req = stream->shutdown_req; in uv__drain()
642 if ((stream->flags & UV_HANDLE_CLOSING) || in uv__drain()
643 !(stream->flags & UV_HANDLE_SHUT)) { in uv__drain()
644 stream->shutdown_req = NULL; in uv__drain()
645 uv__req_unregister(stream->loop, req); in uv__drain()
648 if (stream->flags & UV_HANDLE_CLOSING) in uv__drain()
654 stream->flags |= UV_HANDLE_SHUT; in uv__drain()
656 if (req->cb != NULL) in uv__drain()
657 req->cb(req, err); in uv__drain()
664 return write(fd, vec->iov_base, vec->iov_len); in uv__writev()
673 assert(req->bufs != NULL); in uv__write_req_size()
674 size = uv__count_bufs(req->bufs + req->write_index, in uv__write_req_size()
675 req->nbufs - req->write_index); in uv__write_req_size()
676 assert(req->handle->write_queue_size >= size); in uv__write_req_size()
686 * There may still be other write requests sitting in the queue.
694 assert(n <= stream->write_queue_size); in uv__write_req_update()
695 stream->write_queue_size -= n; in uv__write_req_update()
697 buf = req->bufs + req->write_index; in uv__write_req_update()
700 len = n < buf->len ? n : buf->len; in uv__write_req_update()
701 buf->base += len; in uv__write_req_update()
702 buf->len -= len; in uv__write_req_update()
703 buf += (buf->len == 0); /* Advance to next buffer if this one is empty. */ in uv__write_req_update()
704 n -= len; in uv__write_req_update()
707 req->write_index = buf - req->bufs; in uv__write_req_update()
709 return req->write_index == req->nbufs; in uv__write_req_update()
714 uv_stream_t* stream = req->handle; in uv__write_req_finish()
716 /* Pop the req off tcp->write_queue. */ in uv__write_req_finish()
717 uv__queue_remove(&req->queue); in uv__write_req_finish()
722 * they should stop writing - which they should if we got an error. Something in uv__write_req_finish()
725 if (req->error == 0) { in uv__write_req_finish()
726 if (req->bufs != req->bufsml) in uv__write_req_finish()
727 uv__free(req->bufs); in uv__write_req_finish()
728 req->bufs = NULL; in uv__write_req_finish()
734 uv__queue_insert_tail(&stream->write_completed_queue, &req->queue); in uv__write_req_finish()
735 uv__io_feed(stream->loop, &stream->io_watcher); in uv__write_req_finish()
740 switch (handle->type) { in uv__handle_fd()
743 return ((uv_stream_t*) handle)->io_watcher.fd; in uv__handle_fd()
746 return ((uv_udp_t*) handle)->io_watcher.fd; in uv__handle_fd()
749 return -1; in uv__handle_fd()
771 /* Limit iov count to avoid EINVALs from writev() */ in uv__try_write()
809 while (n == -1 && errno == EINTR); in uv__try_write()
813 while (n == -1 && errno == EINTR); in uv__try_write()
823 /* macOS versions 10.10 and 10.15 - and presumbaly 10.11 to 10.14, too - in uv__try_write()
830 * loop. See https://github.com/libuv/libuv/pull/482. in uv__try_write()
849 * change even if we switch to edge-triggered I/O. in uv__write()
854 if (uv__queue_empty(&stream->write_queue)) in uv__write()
857 q = uv__queue_head(&stream->write_queue); in uv__write()
859 assert(req->handle == stream); in uv__write()
862 &(req->bufs[req->write_index]), in uv__write()
863 req->nbufs - req->write_index, in uv__write()
864 req->send_handle); in uv__write()
868 req->send_handle = NULL; in uv__write()
871 if (count-- > 0) in uv__write()
880 if (stream->flags & UV_HANDLE_BLOCKING_WRITES) in uv__write()
884 uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); in uv__write()
893 req->error = n; in uv__write()
895 uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); in uv__write()
905 if (uv__queue_empty(&stream->write_completed_queue)) in uv__write_callbacks()
908 uv__queue_move(&stream->write_completed_queue, &pq); in uv__write_callbacks()
915 uv__req_unregister(stream->loop, req); in uv__write_callbacks()
917 if (req->bufs != NULL) { in uv__write_callbacks()
918 stream->write_queue_size -= uv__write_req_size(req); in uv__write_callbacks()
919 if (req->bufs != req->bufsml) in uv__write_callbacks()
920 uv__free(req->bufs); in uv__write_callbacks()
921 req->bufs = NULL; in uv__write_callbacks()
925 if (req->cb) in uv__write_callbacks()
926 req->cb(req, req->error); in uv__write_callbacks()
932 stream->flags |= UV_HANDLE_READ_EOF; in uv__stream_eof()
933 stream->flags &= ~UV_HANDLE_READING; in uv__stream_eof()
934 uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); in uv__stream_eof()
937 stream->read_cb(stream, UV_EOF, buf); in uv__stream_eof()
945 queued_fds = stream->queued_fds; in uv__stream_queue_fd()
948 queued_fds = uv__malloc((queue_size - 1) * sizeof(*queued_fds->fds) + in uv__stream_queue_fd()
952 queued_fds->size = queue_size; in uv__stream_queue_fd()
953 queued_fds->offset = 0; in uv__stream_queue_fd()
954 stream->queued_fds = queued_fds; in uv__stream_queue_fd()
957 } else if (queued_fds->size == queued_fds->offset) { in uv__stream_queue_fd()
958 queue_size = queued_fds->size + 8; in uv__stream_queue_fd()
960 (queue_size - 1) * sizeof(*queued_fds->fds) + in uv__stream_queue_fd()
965 * NOTE: if it is fatal - sockets will be closed in uv__stream_close in uv__stream_queue_fd()
969 queued_fds->size = queue_size; in uv__stream_queue_fd()
970 stream->queued_fds = queued_fds; in uv__stream_queue_fd()
974 queued_fds->fds[queued_fds->offset++] = fd; in uv__stream_queue_fd()
988 if (cmsg->cmsg_type != SCM_RIGHTS) { in uv__stream_recv_cmsg()
989 fprintf(stderr, "ignoring non-SCM_RIGHTS ancillary data: %d\n", in uv__stream_recv_cmsg()
990 cmsg->cmsg_type); in uv__stream_recv_cmsg()
994 assert(cmsg->cmsg_len >= CMSG_LEN(0)); in uv__stream_recv_cmsg()
995 count = cmsg->cmsg_len - CMSG_LEN(0); in uv__stream_recv_cmsg()
1002 if (stream->accepted_fd != -1) { in uv__stream_recv_cmsg()
1011 stream->accepted_fd = fd; in uv__stream_recv_cmsg()
1029 stream->flags &= ~UV_HANDLE_READ_PARTIAL; in uv__read()
1032 * we can read it. XXX Need to rearm fd if we switch to edge-triggered I/O. in uv__read()
1036 is_ipc = stream->type == UV_NAMED_PIPE && ((uv_pipe_t*) stream)->ipc; in uv__read()
1039 * tcp->read_cb is NULL or not? in uv__read()
1041 while (stream->read_cb in uv__read()
1042 && (stream->flags & UV_HANDLE_READING) in uv__read()
1043 && (count-- > 0)) { in uv__read()
1044 assert(stream->alloc_cb != NULL); in uv__read()
1047 stream->alloc_cb((uv_handle_t*)stream, 64 * 1024, &buf); in uv__read()
1050 stream->read_cb(stream, UV_ENOBUFS, &buf); in uv__read()
1083 if (stream->flags & UV_HANDLE_READING) { in uv__read()
1084 uv__io_start(stream->loop, &stream->io_watcher, POLLIN); in uv__read()
1087 stream->read_cb(stream, 0, &buf); in uv__read()
1089 } else if (errno == ECONNRESET && stream->type == UV_NAMED_PIPE) { in uv__read()
1095 stream->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); in uv__read()
1096 stream->read_cb(stream, UV__ERR(errno), &buf); in uv__read()
1097 if (stream->flags & UV_HANDLE_READING) { in uv__read()
1098 stream->flags &= ~UV_HANDLE_READING; in uv__read()
1099 uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); in uv__read()
1115 stream->read_cb(stream, err, &buf); in uv__read()
1135 stream->read_cb(stream, err, &buf); in uv__read()
1143 stream->read_cb(stream, nread, &buf); in uv__read()
1147 stream->flags |= UV_HANDLE_READ_PARTIAL; in uv__read()
1156 assert(stream->type == UV_TCP || in uv_shutdown()
1157 stream->type == UV_TTY || in uv_shutdown()
1158 stream->type == UV_NAMED_PIPE); in uv_shutdown()
1160 if (!(stream->flags & UV_HANDLE_WRITABLE) || in uv_shutdown()
1161 stream->flags & UV_HANDLE_SHUT || in uv_shutdown()
1171 uv__req_init(stream->loop, req, UV_SHUTDOWN); in uv_shutdown()
1172 req->handle = stream; in uv_shutdown()
1173 req->cb = cb; in uv_shutdown()
1174 stream->shutdown_req = req; in uv_shutdown()
1175 stream->flags &= ~UV_HANDLE_WRITABLE; in uv_shutdown()
1177 if (uv__queue_empty(&stream->write_queue)) in uv_shutdown()
1178 uv__io_feed(stream->loop, &stream->io_watcher); in uv_shutdown()
1189 assert(stream->type == UV_TCP || in uv__stream_io()
1190 stream->type == UV_NAMED_PIPE || in uv__stream_io()
1191 stream->type == UV_TTY); in uv__stream_io()
1192 assert(!(stream->flags & UV_HANDLE_CLOSING)); in uv__stream_io()
1194 if (stream->connect_req) { in uv__stream_io()
1205 if (uv__stream_fd(stream) == -1) in uv__stream_io()
1208 /* Short-circuit iff POLLHUP is set, the user is still interested in read in uv__stream_io()
1215 (stream->flags & UV_HANDLE_READING) && in uv__stream_io()
1216 (stream->flags & UV_HANDLE_READ_PARTIAL) && in uv__stream_io()
1217 !(stream->flags & UV_HANDLE_READ_EOF)) { in uv__stream_io()
1222 if (uv__stream_fd(stream) == -1) in uv__stream_io()
1230 if (uv__queue_empty(&stream->write_queue)) in uv__stream_io()
1243 uv_connect_t* req = stream->connect_req; in uv__stream_connect()
1246 assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE); in uv__stream_connect()
1249 if (stream->delayed_error) { in uv__stream_connect()
1252 * until the next tick--which is now. in uv__stream_connect()
1254 error = stream->delayed_error; in uv__stream_connect()
1255 stream->delayed_error = 0; in uv__stream_connect()
1270 stream->connect_req = NULL; in uv__stream_connect()
1271 uv__req_unregister(stream->loop, req); in uv__stream_connect()
1273 if (error < 0 || uv__queue_empty(&stream->write_queue)) { in uv__stream_connect()
1274 uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); in uv__stream_connect()
1277 if (req->cb) in uv__stream_connect()
1278 req->cb(req, error); in uv__stream_connect()
1280 if (uv__stream_fd(stream) == -1) in uv__stream_connect()
1294 assert((stream->type == UV_TCP || in uv__check_before_write()
1295 stream->type == UV_NAMED_PIPE || in uv__check_before_write()
1296 stream->type == UV_TTY) && in uv__check_before_write()
1302 if (!(stream->flags & UV_HANDLE_WRITABLE)) in uv__check_before_write()
1306 if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc) in uv__check_before_write()
1312 * OS X specific fields. On other Unices it does (handle)->io_watcher.fd, in uv__check_before_write()
1320 …See https://github.com/mirror/newlib-cygwin/blob/86fc4bf0/winsup/cygwin/fhandler_socket.cc#L1736-L… in uv__check_before_write()
1342 * it means there are error-state requests in the write_completed_queue that in uv_write2()
1347 empty_queue = (stream->write_queue_size == 0); in uv_write2()
1350 uv__req_init(stream->loop, req, UV_WRITE); in uv_write2()
1351 req->cb = cb; in uv_write2()
1352 req->handle = stream; in uv_write2()
1353 req->error = 0; in uv_write2()
1354 req->send_handle = send_handle; in uv_write2()
1355 uv__queue_init(&req->queue); in uv_write2()
1357 req->bufs = req->bufsml; in uv_write2()
1358 if (nbufs > ARRAY_SIZE(req->bufsml)) in uv_write2()
1359 req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); in uv_write2()
1361 if (req->bufs == NULL) in uv_write2()
1364 memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0])); in uv_write2()
1365 req->nbufs = nbufs; in uv_write2()
1366 req->write_index = 0; in uv_write2()
1367 stream->write_queue_size += uv__count_bufs(bufs, nbufs); in uv_write2()
1370 uv__queue_insert_tail(&stream->write_queue, &req->queue); in uv_write2()
1376 if (stream->connect_req) { in uv_write2()
1388 assert(!(stream->flags & UV_HANDLE_BLOCKING_WRITES)); in uv_write2()
1389 uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); in uv_write2()
1423 if (stream->connect_req != NULL || stream->write_queue_size != 0) in uv_try_write2()
1437 assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || in uv__read_start()
1438 stream->type == UV_TTY); in uv__read_start()
1440 /* The UV_HANDLE_READING flag is irrelevant of the state of the stream - it in uv__read_start()
1442 stream->flags |= UV_HANDLE_READING; in uv__read_start()
1443 stream->flags &= ~UV_HANDLE_READ_EOF; in uv__read_start()
1449 stream->read_cb = read_cb; in uv__read_start()
1450 stream->alloc_cb = alloc_cb; in uv__read_start()
1452 uv__io_start(stream->loop, &stream->io_watcher, POLLIN); in uv__read_start()
1461 if (!(stream->flags & UV_HANDLE_READING)) in uv_read_stop()
1464 stream->flags &= ~UV_HANDLE_READING; in uv_read_stop()
1465 uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); in uv_read_stop()
1469 stream->read_cb = NULL; in uv_read_stop()
1470 stream->alloc_cb = NULL; in uv_read_stop()
1476 return !!(stream->flags & UV_HANDLE_READABLE); in uv_is_readable()
1481 return !!(stream->flags & UV_HANDLE_WRITABLE); in uv_is_writable()
1489 assert(handle->type == UV_TCP || in uv___stream_fd()
1490 handle->type == UV_TTY || in uv___stream_fd()
1491 handle->type == UV_NAMED_PIPE); in uv___stream_fd()
1493 s = handle->select; in uv___stream_fd()
1495 return s->fd; in uv___stream_fd()
1497 return handle->io_watcher.fd; in uv___stream_fd()
1508 if (handle->select != NULL) { in uv__stream_close()
1511 s = handle->select; in uv__stream_close()
1513 uv_sem_post(&s->close_sem); in uv__stream_close()
1514 uv_sem_post(&s->async_sem); in uv__stream_close()
1516 uv_thread_join(&s->thread); in uv__stream_close()
1517 uv_sem_destroy(&s->close_sem); in uv__stream_close()
1518 uv_sem_destroy(&s->async_sem); in uv__stream_close()
1519 uv__close(s->fake_fd); in uv__stream_close()
1520 uv__close(s->int_fd); in uv__stream_close()
1521 uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); in uv__stream_close()
1523 handle->select = NULL; in uv__stream_close()
1527 uv__io_close(handle->loop, &handle->io_watcher); in uv__stream_close()
1530 handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); in uv__stream_close()
1532 if (handle->io_watcher.fd != -1) { in uv__stream_close()
1534 if (handle->io_watcher.fd > STDERR_FILENO) in uv__stream_close()
1535 uv__close(handle->io_watcher.fd); in uv__stream_close()
1536 handle->io_watcher.fd = -1; in uv__stream_close()
1539 if (handle->accepted_fd != -1) { in uv__stream_close()
1540 uv__close(handle->accepted_fd); in uv__stream_close()
1541 handle->accepted_fd = -1; in uv__stream_close()
1545 if (handle->queued_fds != NULL) { in uv__stream_close()
1546 queued_fds = handle->queued_fds; in uv__stream_close()
1547 for (i = 0; i < queued_fds->offset; i++) in uv__stream_close()
1548 uv__close(queued_fds->fds[i]); in uv__stream_close()
1549 uv__free(handle->queued_fds); in uv__stream_close()
1550 handle->queued_fds = NULL; in uv__stream_close()
1553 assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT)); in uv__stream_close()