Skip to content

Commit e8a456d

Browse files
committed
[misc] fixed a memory leak bug and added port text in log.
1 parent 2e840c2 commit e8a456d

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

ngx_rtmp_eval.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,14 @@ ngx_rtmp_eval_t ngx_rtmp_eval_session[] = {
6161
static void
6262
ngx_rtmp_eval_append(ngx_buf_t *b, void *data, size_t len, ngx_log_t *log)
6363
{
64-
size_t buf_len;
64+
size_t buf_len;
65+
u_char *old;
6566

6667
if (b->last + len > b->end) {
67-
buf_len = 2 * (b->last - b->pos) + len;
68+
buf_len = (2 * (b->last - b->pos) + len +
69+
NGX_RTMP_EVAL_BUFLEN - 1) & ~(NGX_RTMP_EVAL_BUFLEN - 1);
70+
71+
old = b->start;
6872

6973
b->start = ngx_alloc(buf_len, log);
7074
if (b->start == NULL) {
@@ -74,6 +78,8 @@ ngx_rtmp_eval_append(ngx_buf_t *b, void *data, size_t len, ngx_log_t *log)
7478
b->last = ngx_cpymem(b->start, b->pos, b->last - b->pos);
7579
b->pos = b->start;
7680
b->end = b->start + buf_len;
81+
82+
ngx_free(old);
7783
}
7884

7985
b->last = ngx_cpymem(b->last, data, len);

ngx_rtmp_relay_module.c

+32-19
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,16 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
478478
pc->log = &rctx->log;
479479
pc->get = ngx_rtmp_relay_get_peer;
480480
pc->free = ngx_rtmp_relay_free_peer;
481-
pc->name = &addr->name;
481+
482+
pc->name = ngx_palloc(pool, sizeof(ngx_str_t) + addr->name.len);
483+
if (pc->name == NULL) {
484+
goto clear;
485+
}
486+
487+
pc->name->len = addr->name.len;
488+
pc->name->data = (u_char *) pc->name + sizeof(ngx_str_t);
489+
ngx_memcpy(pc->name->data, addr->name.data, addr->name.len);
490+
482491
pc->socklen = addr->socklen;
483492
pc->sockaddr = (struct sockaddr *)ngx_palloc(pool, pc->socklen);
484493
if (pc->sockaddr == NULL) {
@@ -502,12 +511,27 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
502511
goto clear;
503512
}
504513

505-
if (addr->sockaddr->sa_family != AF_UNIX) {
514+
#if (NGX_HAVE_UNIX_DOMAIN)
515+
if (addr->sockaddr->sa_family == AF_UNIX) {
516+
addr_conf->addr_text.len = target->url.host.len;
517+
addr_conf->addr_text.data = ngx_pcalloc(pool,
518+
addr_conf->addr_text.len);
519+
if (addr_conf->addr_text.data == NULL) {
520+
ngx_log_error(NGX_LOG_ERR, racf->log, 0,
521+
"relay: allocation for unix address failed");
522+
goto clear;
523+
}
524+
525+
ngx_memcpy(addr_conf->addr_text.data, target->url.host.data,
526+
addr_conf->addr_text.len);
527+
} else
528+
#endif
529+
{
506530
len = ngx_sock_ntop(pc->sockaddr,
507531
#if (nginx_version >= 1005003)
508532
pc->socklen,
509533
#endif
510-
buf, NGX_SOCKADDR_STRLEN, 0);
534+
buf, NGX_SOCKADDR_STRLEN, 1);
511535

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

523-
#if (NGX_HAVE_UNIX_DOMAIN)
524-
if (addr->sockaddr->sa_family == AF_UNIX) {
525-
addr_conf->addr_text.len = target->url.host.len;
526-
addr_conf->addr_text.data = ngx_pcalloc(pool,
527-
addr_conf->addr_text.len);
528-
if (addr_conf->addr_text.data == NULL) {
529-
ngx_log_error(NGX_LOG_ERR, racf->log, 0,
530-
"relay: allocation for unix address failed");
531-
goto clear;
532-
}
533-
534-
ngx_memcpy(addr_conf->addr_text.data, target->url.host.data,
535-
addr_conf->addr_text.len);
536-
}
537-
#endif
538-
539547
addr_conf->default_server = ngx_pcalloc(pool,
540548
sizeof(ngx_rtmp_core_srv_conf_t));
541549
if (addr_conf->default_server == NULL) {
@@ -592,6 +600,7 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t *name,
592600

593601
rctx = NULL;
594602
save = target->url;
603+
ngx_memzero(&url, sizeof(ngx_str_t));
595604

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

629638
error:
630639
target->url = save;
640+
if (url.len) {
641+
ngx_free(url.data);
642+
ngx_memzero(&url, sizeof(ngx_str_t));
643+
}
631644

632645
return rctx;
633646
}

0 commit comments

Comments
 (0)