Skip to content

Commit

Permalink
[misc] fixed a memory leak bug and added port text in log.
Browse files Browse the repository at this point in the history
  • Loading branch information
winshining committed Dec 31, 2024
1 parent 2e840c2 commit e8a456d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 21 deletions.
10 changes: 8 additions & 2 deletions ngx_rtmp_eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,14 @@ ngx_rtmp_eval_t ngx_rtmp_eval_session[] = {
static void
ngx_rtmp_eval_append(ngx_buf_t *b, void *data, size_t len, ngx_log_t *log)
{
size_t buf_len;
size_t buf_len;
u_char *old;

if (b->last + len > b->end) {
buf_len = 2 * (b->last - b->pos) + len;
buf_len = (2 * (b->last - b->pos) + len +
NGX_RTMP_EVAL_BUFLEN - 1) & ~(NGX_RTMP_EVAL_BUFLEN - 1);

old = b->start;

b->start = ngx_alloc(buf_len, log);
if (b->start == NULL) {
Expand All @@ -74,6 +78,8 @@ ngx_rtmp_eval_append(ngx_buf_t *b, void *data, size_t len, ngx_log_t *log)
b->last = ngx_cpymem(b->start, b->pos, b->last - b->pos);
b->pos = b->start;
b->end = b->start + buf_len;

ngx_free(old);
}

b->last = ngx_cpymem(b->last, data, len);
Expand Down
51 changes: 32 additions & 19 deletions ngx_rtmp_relay_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,16 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
pc->log = &rctx->log;
pc->get = ngx_rtmp_relay_get_peer;
pc->free = ngx_rtmp_relay_free_peer;
pc->name = &addr->name;

pc->name = ngx_palloc(pool, sizeof(ngx_str_t) + addr->name.len);
if (pc->name == NULL) {
goto clear;
}

pc->name->len = addr->name.len;
pc->name->data = (u_char *) pc->name + sizeof(ngx_str_t);
ngx_memcpy(pc->name->data, addr->name.data, addr->name.len);

pc->socklen = addr->socklen;
pc->sockaddr = (struct sockaddr *)ngx_palloc(pool, pc->socklen);
if (pc->sockaddr == NULL) {
Expand All @@ -502,12 +511,27 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
goto clear;
}

if (addr->sockaddr->sa_family != AF_UNIX) {
#if (NGX_HAVE_UNIX_DOMAIN)
if (addr->sockaddr->sa_family == AF_UNIX) {
addr_conf->addr_text.len = target->url.host.len;
addr_conf->addr_text.data = ngx_pcalloc(pool,
addr_conf->addr_text.len);
if (addr_conf->addr_text.data == NULL) {
ngx_log_error(NGX_LOG_ERR, racf->log, 0,
"relay: allocation for unix address failed");
goto clear;
}

ngx_memcpy(addr_conf->addr_text.data, target->url.host.data,
addr_conf->addr_text.len);
} else
#endif
{
len = ngx_sock_ntop(pc->sockaddr,
#if (nginx_version >= 1005003)
pc->socklen,
#endif
buf, NGX_SOCKADDR_STRLEN, 0);
buf, NGX_SOCKADDR_STRLEN, 1);

addr_conf->addr_text.data = ngx_pcalloc(pool, len);
if (addr_conf->addr_text.data == NULL) {
Expand All @@ -520,22 +544,6 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
ngx_memcpy(addr_conf->addr_text.data, buf, len);
}

#if (NGX_HAVE_UNIX_DOMAIN)
if (addr->sockaddr->sa_family == AF_UNIX) {
addr_conf->addr_text.len = target->url.host.len;
addr_conf->addr_text.data = ngx_pcalloc(pool,
addr_conf->addr_text.len);
if (addr_conf->addr_text.data == NULL) {
ngx_log_error(NGX_LOG_ERR, racf->log, 0,
"relay: allocation for unix address failed");
goto clear;
}

ngx_memcpy(addr_conf->addr_text.data, target->url.host.data,
addr_conf->addr_text.len);
}
#endif

addr_conf->default_server = ngx_pcalloc(pool,
sizeof(ngx_rtmp_core_srv_conf_t));
if (addr_conf->default_server == NULL) {
Expand Down Expand Up @@ -592,6 +600,7 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t *name,

rctx = NULL;
save = target->url;
ngx_memzero(&url, sizeof(ngx_str_t));

if(ngx_strlchr(target->url.url.data,
target->url.url.data + target->url.url.len, '$'))
Expand Down Expand Up @@ -628,6 +637,10 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t *name,

error:
target->url = save;
if (url.len) {
ngx_free(url.data);
ngx_memzero(&url, sizeof(ngx_str_t));
}

return rctx;
}
Expand Down

0 comments on commit e8a456d

Please sign in to comment.