stream: ast_stream_clone() cannot copy the opaque user data.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 2 May 2017 23:05:01 +0000 (18:05 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 5 May 2017 23:49:19 +0000 (18:49 -0500)
ast_stream_clone() cannot copy the opaque user data stored on a stream.
We don't know how to clone the data so it isn't copied into the clone.

Change-Id: Ia51321bf38ecbfdcc53787ca77ea5fd2cabdf367

include/asterisk/stream.h
main/stream.c

index 1bb34b7..821ecec 100644 (file)
@@ -126,7 +126,7 @@ void ast_stream_free(struct ast_stream *stream);
  * \retval NULL failure
  *
  * \note Opaque data pointers set with ast_stream_set_data() are not part
- * of the deep clone.  The pointers are simply copied.
+ * of the deep clone.  We have no way to clone the data.
  *
  * \since 15
  */
index 0f23933..804a0b8 100644 (file)
@@ -99,6 +99,7 @@ struct ast_stream *ast_stream_clone(const struct ast_stream *stream)
 {
        struct ast_stream *new_stream;
        size_t stream_size;
+       int idx;
 
        if (!stream) {
                return NULL;
@@ -115,6 +116,12 @@ struct ast_stream *ast_stream_clone(const struct ast_stream *stream)
                ao2_ref(new_stream->formats, +1);
        }
 
+       /* We cannot clone the opaque data because we don't know how. */
+       for (idx = 0; idx < AST_STREAM_DATA_SLOT_MAX; ++idx) {
+               new_stream->data[idx] = NULL;
+               new_stream->data_free_fn[idx] = NULL;
+       }
+
        return new_stream;
 }