ngx_int_t websocket_subscriber_destroy(subscriber_t *sub) { full_subscriber_t *fsub = (full_subscriber_t *)sub; if(!fsub->awaiting_destruction) { fsub->ctx->sub = NULL; } if(fsub->upstream_stuff && fsub->upstream_stuff->psr_data.tmp_pool) { ngx_destroy_pool(fsub->upstream_stuff->psr_data.tmp_pool); } if(sub->reserved > 0) { DBG("%p not ready to destroy (reserved for %i) for req %p", sub, sub->reserved, fsub->sub.request); fsub->awaiting_destruction = 1; } else { DBG("%p destroy for req %p", sub, fsub->sub.request); #if NCHAN_SUBSCRIBER_LEAK_DEBUG subscriber_debug_remove(&fsub->sub); #endif nchan_free_msg_id(&sub->last_msgid); //debug ngx_memset(fsub, 0x13, sizeof(*fsub)); ngx_free(fsub); } return NGX_OK; }
ngx_int_t longpoll_subscriber_destroy(subscriber_t *sub) { full_subscriber_t *fsub = (full_subscriber_t *)sub; if(sub->reserved > 0) { DBG("%p not ready to destroy (reserved for %i) for req %p", sub, sub->reserved, fsub->sub.request); fsub->data.awaiting_destruction = 1; } else { DBG("%p destroy for req %p", sub, fsub->sub.request); nchan_free_msg_id(&fsub->sub.last_msgid); #if NCHAN_SUBSCRIBER_LEAK_DEBUG subscriber_debug_remove(sub); ngx_free(sub->lbl); ngx_memset(fsub, 0xB9, sizeof(*fsub)); //debug #endif ngx_free(fsub); } return NGX_OK; }