Lines Matching refs:ctx

39 lws_smd_msg_alloc(struct lws_context *ctx, lws_smd_class_t _class, size_t len)
45 if (!(ctx->smd._class_filter & _class)) {
46 lwsl_cx_info(ctx, "rejecting class 0x%x as no participant wants",
124 struct lws_context *ctx = lws_container_of(smd, struct lws_context, smd);
127 lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) {
197 _lws_smd_msg_send(struct lws_context *ctx, void *pay, struct lws_smd_peer *exc)
202 if (ctx->smd.owner_messages.count >= ctx->smd_queue_depth) {
203 lwsl_cx_warn(ctx, "rejecting message on queue depth %d",
204 (int)ctx->smd.owner_messages.count);
209 if (!ctx->smd.delivering &&
210 lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++ peers */
213 if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++++++++++ messages */
217 &ctx->smd, msg, exc);
220 lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */
223 if (!ctx->smd.delivering)
224 lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */
233 lws_dll2_add_tail(&msg->list, &ctx->smd.owner_messages);
240 lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) {
254 msg, msg->refcount, ctx->smd.owner_messages.count);
255 lws_smd_dump(&ctx->smd);
258 lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */
261 if (!ctx->smd.delivering)
262 lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */
265 lws_cancel_service(ctx);
275 lws_smd_msg_send(struct lws_context *ctx, void *pay)
277 return _lws_smd_msg_send(ctx, pay, NULL);
285 lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class,
293 if (!(ctx->smd._class_filter & _class))
307 p = lws_smd_msg_alloc(ctx, _class, (size_t)n + 2);
321 if (lws_smd_msg_send(ctx, p)) {
370 _lws_smd_ss_rx_forward(struct lws_context *ctx, const char *tag,
391 if (!(ctx->smd._class_filter & _class))
398 p = lws_smd_msg_alloc(ctx, _class, len);
415 if (_lws_smd_msg_send(ctx, p, pr)) {
434 struct lws_context *ctx = lws_ss_get_context(h);
436 return _lws_smd_ss_rx_forward(ctx, lws_ss_tag(h), h->u.smd.smd_peer, buf, len);
445 struct lws_context *ctx = lws_sspc_get_context(h);
447 return _lws_smd_ss_rx_forward(ctx, lws_sspc_tag(h), NULL, buf, len);
481 _lws_smd_msg_destroy(pr->ctx, smd, pr->tail);
527 _lws_smd_msg_deliver_peer(struct lws_context *ctx, lws_smd_peer_t *pr)
537 lwsl_cx_info(ctx, "deliver cl 0x%x, len %d, refc %d, to peer %p",
556 if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++ messages */
560 _lws_smd_msg_destroy(ctx, &ctx->smd, msg);
561 lws_mutex_unlock(ctx->smd.lock_messages); /* messages ------- */
572 lws_smd_msg_distribute(struct lws_context *ctx)
578 if (!ctx->smd.owner_messages.count)
581 ctx->smd.delivering = 1;
585 if (lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++ peers */
589 ctx->smd.owner_peers.head) {
592 more = (char)(more | !!_lws_smd_msg_deliver_peer(ctx, pr));
596 lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */
599 ctx->smd.delivering = 0;
605 lws_smd_register(struct lws_context *ctx, void *opaque, int flags,
616 pr->ctx = ctx;
618 if (!ctx->smd.delivering &&
619 lws_mutex_lock(ctx->smd.lock_peers)) { /* +++++++++++++++ peers */
628 if (lws_mutex_lock(ctx->smd.lock_messages)) { /* +++++++++ messages */
634 lws_dll2_add_tail(&pr->list, &ctx->smd.owner_peers);
637 _lws_smd_class_mask_union(&ctx->smd);
647 ctx->smd.owner_messages.head) {
657 lws_mutex_unlock(ctx->smd.lock_messages); /* messages ------- */
659 lwsl_cx_info(ctx, "peer %p (count %u) registered", pr,
660 (unsigned int)ctx->smd.owner_peers.count);
663 if (!ctx->smd.delivering)
664 lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */
677 lwsl_cx_notice(pr->ctx, "destroying peer %p", pr);
684 lws_smd_message_pending(struct lws_context *ctx)
693 if (!ctx->smd.owner_messages.count)
701 if (lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++++++++++ peers */
703 if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++++++++++ messages */
707 ctx->smd.owner_messages.head) {
710 if ((lws_now_usecs() - msg->timestamp) > ctx->smd_ttl_us) {
711 lwsl_cx_warn(ctx, "timing out queued message %p",
723 ctx->smd.owner_peers.head) {
737 _lws_smd_msg_destroy(ctx, &ctx->smd, msg);
741 lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */
747 lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) {
762 lws_mutex_unlock(ctx->smd.lock_peers); /* --------------------- peers */
768 _lws_smd_destroy(struct lws_context *ctx)
772 ctx->smd._class_filter = 0;
779 ctx->smd.owner_messages.head) {
792 ctx->smd.owner_peers.head) {
800 lws_mutex_destroy(ctx->smd.lock_messages);
801 lws_mutex_destroy(ctx->smd.lock_peers);