}
/*! \brief Helper function which allocates datastore with a session media */
-static struct ast_datastore *create_datastore_session_media(struct ast_sip_session *session, struct ast_sip_session_media *session_media)
+static int create_datastore_session_media(struct ast_sip_session *session, struct ast_sip_session_media *session_media)
{
struct ast_datastore *datastore = NULL;
- if (!(datastore = ast_sip_session_alloc_datastore(&session_media_datastore, "t38_session_media"))
- || ast_sip_session_add_datastore(session, datastore)) {
- return NULL;
+ if (!(datastore = ast_sip_session_alloc_datastore(&session_media_datastore, "t38_session_media"))) {
+ return -1;
+ }
+
+ if (ast_sip_session_add_datastore(session, datastore)) {
+ ao2_ref(datastore, -1);
+ return -1;
}
datastore->data = session_media;
ao2_bump(session_media);
- return datastore;
+ ao2_ref(datastore, -1);
+ return 0;
}
/*! \brief Helper function for changing the T.38 state */
return 0;
}
- if (!create_datastore_session_media(session, session_media)) {
+ if (create_datastore_session_media(session, session_media)) {
return -1;
}