diff options
author | Walter Doekes <walter+asterisk@wjd.nu> | 2015-07-02 13:10:59 +0200 |
---|---|---|
committer | Walter Doekes <walter+asterisk@wjd.nu> | 2015-07-02 06:18:58 -0500 |
commit | b835312b4c2e1fcd3f7efb5ae45a0c4d10d4d5f7 (patch) | |
tree | 2e0e7271656f8b4b50605bd722be13603b920e71 | |
parent | 69bfa518a02cbd69b364e5b0a500fc160e7b285d (diff) |
rtp_engine: Skip useless self-assignment in ast_rtp_engine_unload_format.
When running valgrind on Asterisk, it complained about:
==32423== Source and destination overlap in memcpy(0x85a920, 0x85a920, 304)
==32423== at 0x4C2F71C: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/...)
==32423== by 0x55BA91: ast_rtp_engine_unload_format (rtp_engine.c:2292)
==32423== by 0x4EEFB7: ast_format_attr_unreg_interface (format.c:1437)
The code in question is a struct assignment, which may be performed by
memcpy as a compiler optimization. It is changed to only copy the struct
contents if source and destination are different.
ASTERISK-25219 #close
Change-Id: I6d3546c326b03378ca8e9b8cefd41c16e0088b9a
-rw-r--r-- | main/rtp_engine.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/main/rtp_engine.c b/main/rtp_engine.c index e09dcb88c..2d61c89b6 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -1798,7 +1798,9 @@ int ast_rtp_engine_unload_format(struct ast_format *format) rtp_engine_mime_type_cleanup(x); continue; } - ast_rtp_mime_types[y] = ast_rtp_mime_types[x]; + if (x != y) { + ast_rtp_mime_types[y] = ast_rtp_mime_types[x]; + } y++; } mime_types_len = y; |