Lines Matching refs:wsi

28 _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa)
39 if (!wsi)
42 assert(wsi->position_in_fds_table == LWS_NO_FDS_POS ||
43 wsi->position_in_fds_table >= 0);
45 if (wsi->position_in_fds_table == LWS_NO_FDS_POS)
48 if (((volatile struct lws *)wsi)->handling_pollout &&
58 ((volatile struct lws *)wsi)->leave_pollout_active = 1;
64 lwsl_wsi_debug(wsi, "using leave_pollout_active");
69 context = wsi->a.context;
70 pt = &context->pt[(int)wsi->tsi];
72 assert(wsi->position_in_fds_table < (int)pt->fds_count);
115 ftp->fd_index = wsi->position_in_fds_table;
132 lws_cancel_service_pt(wsi);
148 pfd = &pt->fds[wsi->position_in_fds_table];
149 pa->fd = wsi->desc.sockfd;
150 lwsl_wsi_debug(wsi, "fd %d events %d -> %d", pa->fd, pfd->events,
155 if (wsi->mux_substream)
160 if (wsi->a.vhost &&
161 wsi->a.vhost->protocols[0].callback(wsi,
163 wsi->user_space, (void *)pa, 0)) {
171 context->event_loop_ops->io(wsi,
175 context->event_loop_ops->io(wsi,
179 context->event_loop_ops->io(wsi,
183 context->event_loop_ops->io(wsi,
198 if (lws_plat_change_pollfd(context, wsi, pfd)) {
199 lwsl_wsi_info(wsi, "failed");
204 if (sampled_tid && wsi->a.vhost) {
205 tid = wsi->a.vhost->protocols[0].callback(wsi,
212 lws_cancel_service_pt(wsi);
235 struct lws *wsi = lws_container_of(d, struct lws,
238 _lws_change_pollfd(wsi, allow ? 0 : LWS_POLLIN,
256 struct lws *wsi = wsi_from_fd(pt->context, pt->fds[n].fd);
258 lwsl_cx_warn(pt->context, " %d: fd %d, wsi %s, pos_in_fds: %d",
259 n + 1, pt->fds[n].fd, lws_wsi_tag(wsi),
260 wsi ? wsi->position_in_fds_table : -1);
268 __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi)
271 struct lws_pollargs pa = { wsi->desc.sockfd, LWS_POLLIN, 0 };
273 struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
280 lwsl_wsi_debug(wsi, "tsi=%d, sock=%d, pos-in-fds=%d",
281 wsi->tsi, wsi->desc.sockfd, pt->fds_count);
290 if (!wsi->a.context->max_fds_unrelated_to_ulimit &&
291 wsi->desc.sockfd - lws_plat_socket_offset() >= (int)context->max_fds) {
293 wsi->desc.sockfd, context->max_fds,
299 assert(wsi);
302 assert(wsi->event_pipe || wsi->a.vhost || wsi == pt->context->netlink);
304 assert(wsi->event_pipe || wsi->a.vhost);
306 assert(lws_socket_is_valid(wsi->desc.sockfd));
310 if (wsi->a.vhost &&
311 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL,
312 wsi->user_space, (void *) &pa, 1))
316 if (insert_wsi(context, wsi))
319 wsi->position_in_fds_table = (int)pt->fds_count;
321 pt->fds[wsi->position_in_fds_table].fd = wsi->desc.sockfd;
322 pt->fds[wsi->position_in_fds_table].events = LWS_POLLIN;
327 lws_plat_insert_socket_into_fds(context, wsi);
332 if (wsi->a.vhost &&
333 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_ADD_POLL_FD,
334 wsi->user_space, (void *) &pa, 0))
344 if (wsi->a.vhost &&
345 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL,
346 wsi->user_space, (void *)&pa, 1))
358 __remove_wsi_socket_from_fds(struct lws *wsi)
360 struct lws_context *context = wsi->a.context;
362 struct lws_pollargs pa = { wsi->desc.sockfd, 0, 0 };
364 struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
373 if (!wsi->a.context->max_fds_unrelated_to_ulimit &&
374 wsi->desc.sockfd - lws_plat_socket_offset() > (int)context->max_fds) {
375 lwsl_wsi_err(wsi, "fd %d too high (%d)",
376 wsi->desc.sockfd,
383 if (wsi->a.vhost && wsi->a.vhost->protocols &&
384 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL,
385 wsi->user_space, (void *)&pa, 1))
389 __lws_same_vh_protocol_remove(wsi);
392 m = wsi->position_in_fds_table;
398 context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ |
401 lwsl_notice("%s: wsi=%s, skt=%d, fds pos=%d, end guy pos=%d, endfd=%d\n",
402 __func__, lws_wsi_tag(wsi), wsi->desc.sockfd, wsi->position_in_fds_table,
411 delete_from_fd(context, wsi->desc.sockfd);
422 lws_plat_delete_socket_from_fds(context, wsi, m);
430 lwsl_wsi_err(wsi, "no wsi for fd %d pos %d, "
439 /* removed wsi has no position any more */
440 wsi->position_in_fds_table = LWS_NO_FDS_POS;
444 if (lws_socket_is_valid(wsi->desc.sockfd) && wsi->a.vhost &&
445 wsi->a.vhost->protocols[0].callback(wsi,
447 wsi->user_space,
461 if (wsi->a.vhost &&
462 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL,
463 wsi->user_space, (void *) &pa, 1))
473 __lws_change_pollfd(struct lws *wsi, int _and, int _or)
479 if (!wsi || (!wsi->a.protocol && !wsi->event_pipe) ||
480 wsi->position_in_fds_table == LWS_NO_FDS_POS)
483 context = lws_get_context(wsi);
488 if (wsi->a.vhost &&
489 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL,
490 wsi->user_space, (void *) &pa, 0))
494 ret = _lws_change_pollfd(wsi, _and, _or, &pa);
497 if (wsi->a.vhost &&
498 wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL,
499 wsi->user_space, (void *) &pa, 0))
507 lws_change_pollfd(struct lws *wsi, int _and, int _or)
512 pt = &wsi->a.context->pt[(int)wsi->tsi];
515 ret = __lws_change_pollfd(wsi, _and, _or);
522 lws_callback_on_writable(struct lws *wsi)
524 struct lws *w = wsi;
526 if (lwsi_state(wsi) == LRS_SHUTDOWN)
529 if (wsi->socket_is_permanently_unusable)
532 if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_callback_on_writable)) {
533 int q = lws_rops_func_fidx(wsi->role_ops,
535 callback_on_writable(wsi);
538 w = lws_get_network_wsi(wsi);
541 lwsl_wsi_debug(wsi, "failed to find socket %d",
542 wsi->desc.sockfd);
563 lws_same_vh_protocol_insert(struct lws *wsi, int n)
565 lws_context_lock(wsi->a.context, __func__);
566 lws_vhost_lock(wsi->a.vhost);
568 lws_dll2_remove(&wsi->same_vh_protocol);
569 lws_dll2_add_head(&wsi->same_vh_protocol,
570 &wsi->a.vhost->same_vh_protocol_owner[n]);
572 wsi->bound_vhost_index = (uint8_t)n;
574 lws_vhost_unlock(wsi->a.vhost);
575 lws_context_unlock(wsi->a.context);
579 __lws_same_vh_protocol_remove(struct lws *wsi)
581 if (wsi->a.vhost && wsi->a.vhost->same_vh_protocol_owner)
582 lws_dll2_remove(&wsi->same_vh_protocol);
586 lws_same_vh_protocol_remove(struct lws *wsi)
588 if (!wsi->a.vhost)
591 lws_context_lock(wsi->a.context, __func__);
592 lws_vhost_lock(wsi->a.vhost);
594 __lws_same_vh_protocol_remove(wsi);
596 lws_vhost_unlock(wsi->a.vhost);
597 lws_context_unlock(wsi->a.context);
605 struct lws *wsi;
622 wsi = lws_container_of(d, struct lws, same_vh_protocol);
624 assert(wsi->a.protocol == protocol);
625 lws_callback_on_writable(wsi);