]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
core: Don't create snapshots with locks.
authorJoshua Colp <jcolp@digium.com>
Tue, 10 Mar 2015 23:09:49 +0000 (23:09 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 10 Mar 2015 23:09:49 +0000 (23:09 +0000)
Snapshots are immutable and are never changed. Allocating them
with a lock is wasteful.

Review: https://reviewboard.asterisk.org/r/4469/
........

Merged revisions 432742 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432743 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/endpoints.c
main/stasis_bridges.c
main/stasis_channels.c

index f8cca45b89f82a907bf83e20cef8300793b27e8e..3a6f494c02720dfc43b045fe66b036722e908d01 100644 (file)
@@ -467,9 +467,10 @@ struct ast_endpoint_snapshot *ast_endpoint_snapshot_create(
 
        channel_count = ao2_container_count(endpoint->channel_ids);
 
-       snapshot = ao2_alloc(
+       snapshot = ao2_alloc_options(
                sizeof(*snapshot) + channel_count * sizeof(char *),
-               endpoint_snapshot_dtor);
+               endpoint_snapshot_dtor,
+               AO2_ALLOC_OPT_LOCK_NOLOCK);
 
        if (ast_string_field_init(snapshot, 80) != 0) {
                return NULL;
index fbdb98c8300f5ed64226e8eef503def7221e18d1..1838557737b14d3d6b3d51c304fde853804ec55b 100644 (file)
@@ -232,7 +232,8 @@ struct ast_bridge_snapshot *ast_bridge_snapshot_create(struct ast_bridge *bridge
        RAII_VAR(struct ast_bridge_snapshot *, snapshot, NULL, ao2_cleanup);
        struct ast_bridge_channel *bridge_channel;
 
-       snapshot = ao2_alloc(sizeof(*snapshot), bridge_snapshot_dtor);
+       snapshot = ao2_alloc_options(sizeof(*snapshot), bridge_snapshot_dtor,
+               AO2_ALLOC_OPT_LOCK_NOLOCK);
        if (!snapshot || ast_string_field_init(snapshot, 128)) {
                return NULL;
        }
index 6b3f76592249fc61825cec85e553a025e305c5ce..85abe58bca7b1b20a658cf08d2d38c381c8c83c0 100644 (file)
@@ -209,7 +209,8 @@ struct ast_channel_snapshot *ast_channel_snapshot_create(struct ast_channel *cha
                return NULL;
        }
 
-       snapshot = ao2_alloc(sizeof(*snapshot), channel_snapshot_dtor);
+       snapshot = ao2_alloc_options(sizeof(*snapshot), channel_snapshot_dtor,
+               AO2_ALLOC_OPT_LOCK_NOLOCK);
        if (!snapshot || ast_string_field_init(snapshot, 1024)) {
                ao2_cleanup(snapshot);
                return NULL;
@@ -617,7 +618,8 @@ void ast_multi_channel_blob_add_channel(struct ast_multi_channel_blob *obj, cons
                return;
        }
 
-       role_snapshot = ao2_alloc(sizeof(*role_snapshot) + role_len, channel_role_snapshot_dtor);
+       role_snapshot = ao2_alloc_options(sizeof(*role_snapshot) + role_len, channel_role_snapshot_dtor,
+               AO2_ALLOC_OPT_LOCK_NOLOCK);
        if (!role_snapshot) {
                return;
        }