diff options
-rw-r--r-- | addons/cdr_mysql.c | 8 | ||||
-rw-r--r-- | autoconf/ast_ext_tool_check.m4 | 2 | ||||
-rw-r--r-- | autoconf/ast_pkgconfig.m4 | 2 | ||||
-rwxr-xr-x | configure | 28 | ||||
-rw-r--r-- | include/asterisk/res_pjsip.h | 2 | ||||
-rwxr-xr-x | menuselect/configure | 4 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_scheduler.c | 102 | ||||
-rw-r--r-- | res/res_pjsip_session.c | 2 |
8 files changed, 83 insertions, 67 deletions
diff --git a/addons/cdr_mysql.c b/addons/cdr_mysql.c index 2fefe4ed1..97ebdf26f 100644 --- a/addons/cdr_mysql.c +++ b/addons/cdr_mysql.c @@ -58,6 +58,14 @@ #define DATE_FORMAT "%Y-%m-%d %T" +#ifndef MYSQL_PORT +# ifdef MARIADB_PORT +# define MYSQL_PORT MARIADB_PORT +# else +# define MYSQL_PORT 3306 +# endif +#endif + AST_THREADSTORAGE(sql1_buf); AST_THREADSTORAGE(sql2_buf); AST_THREADSTORAGE(escape_buf); diff --git a/autoconf/ast_ext_tool_check.m4 b/autoconf/ast_ext_tool_check.m4 index ef762eb87..cbe109e4a 100644 --- a/autoconf/ast_ext_tool_check.m4 +++ b/autoconf/ast_ext_tool_check.m4 @@ -11,7 +11,7 @@ AC_DEFUN([AST_EXT_TOOL_CHECK], AC_PATH_TOOL(CONFIG_$1, $2, No, [${$1_DIR}/bin:$PATH]) if test ! "x${CONFIG_$1}" = xNo; then $1_INCLUDE=$(${CONFIG_$1} m4_default([$3],[--cflags])) - $1_INCLUDE=$(echo ${$1_INCLUDE} | $SED -e "s|-I|-I${$1_DIR}|g") + $1_INCLUDE=$(echo ${$1_INCLUDE} | $SED -e "s|-I|-I${$1_DIR}|g" -e "s|-std=c99||g") $1_LIB=$(${CONFIG_$1} m4_default([$4],[--libs])) $1_LIB=$(echo ${$1_LIB} | $SED -e "s|-L|-L${$1_DIR}|g") diff --git a/autoconf/ast_pkgconfig.m4 b/autoconf/ast_pkgconfig.m4 index ae7bbc086..3415ed547 100644 --- a/autoconf/ast_pkgconfig.m4 +++ b/autoconf/ast_pkgconfig.m4 @@ -5,7 +5,7 @@ AC_DEFUN([AST_PKG_CONFIG_CHECK], if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then PKG_CHECK_MODULES($1, $2, [ PBX_$1=1 - $1_INCLUDE="$$1_CFLAGS" + $1_INCLUDE=$(echo ${$1_CFLAGS} | $SED -e "s|-std=c99||g") $1_LIB="$$1_LIBS" AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.]) ], [ @@ -13427,7 +13427,7 @@ else $as_echo "yes" >&6; } PBX_LIBEDIT=1 - LIBEDIT_INCLUDE="$LIBEDIT_CFLAGS" + LIBEDIT_INCLUDE=$(echo ${LIBEDIT_CFLAGS} | $SED -e "s|-std=c99||g") LIBEDIT_LIB="$LIBEDIT_LIBS" $as_echo "#define HAVE_LIBEDIT 1" >>confdefs.h @@ -14101,7 +14101,7 @@ fi if test ! "x${CONFIG_LIBXML2}" = xNo; then LIBXML2_INCLUDE=$(${CONFIG_LIBXML2} --cflags) - LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g") + LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g" -e "s|-std=c99||g") LIBXML2_LIB=$(${CONFIG_LIBXML2} --libs) LIBXML2_LIB=$(echo ${LIBXML2_LIB} | $SED -e "s|-L|-L${LIBXML2_DIR}|g") @@ -20491,7 +20491,7 @@ else $as_echo "yes" >&6; } PBX_ILBC=1 - ILBC_INCLUDE="$ILBC_CFLAGS" + ILBC_INCLUDE=$(echo ${ILBC_CFLAGS} | $SED -e "s|-std=c99||g") ILBC_LIB="$ILBC_LIBS" $as_echo "#define HAVE_ILBC 1" >>confdefs.h @@ -22629,7 +22629,7 @@ fi if test ! "x${CONFIG_MYSQLCLIENT}" = xNo; then MYSQLCLIENT_INCLUDE=$(${CONFIG_MYSQLCLIENT} --cflags) - MYSQLCLIENT_INCLUDE=$(echo ${MYSQLCLIENT_INCLUDE} | $SED -e "s|-I|-I${MYSQLCLIENT_DIR}|g") + MYSQLCLIENT_INCLUDE=$(echo ${MYSQLCLIENT_INCLUDE} | $SED -e "s|-I|-I${MYSQLCLIENT_DIR}|g" -e "s|-std=c99||g") MYSQLCLIENT_LIB=$(${CONFIG_MYSQLCLIENT} --libs) MYSQLCLIENT_LIB=$(echo ${MYSQLCLIENT_LIB} | $SED -e "s|-L|-L${MYSQLCLIENT_DIR}|g") @@ -22846,7 +22846,7 @@ fi if test ! "x${CONFIG_NEON}" = xNo; then NEON_INCLUDE=$(${CONFIG_NEON} --cflags) - NEON_INCLUDE=$(echo ${NEON_INCLUDE} | $SED -e "s|-I|-I${NEON_DIR}|g") + NEON_INCLUDE=$(echo ${NEON_INCLUDE} | $SED -e "s|-I|-I${NEON_DIR}|g" -e "s|-std=c99||g") NEON_LIB=$(${CONFIG_NEON} --libs) NEON_LIB=$(echo ${NEON_LIB} | $SED -e "s|-L|-L${NEON_DIR}|g") @@ -22966,7 +22966,7 @@ fi if test ! "x${CONFIG_NEON29}" = xNo; then NEON29_INCLUDE=$(${CONFIG_NEON29} --cflags) - NEON29_INCLUDE=$(echo ${NEON29_INCLUDE} | $SED -e "s|-I|-I${NEON29_DIR}|g") + NEON29_INCLUDE=$(echo ${NEON29_INCLUDE} | $SED -e "s|-I|-I${NEON29_DIR}|g" -e "s|-std=c99||g") NEON29_LIB=$(${CONFIG_NEON29} --libs) NEON29_LIB=$(echo ${NEON29_LIB} | $SED -e "s|-L|-L${NEON29_DIR}|g") @@ -23110,7 +23110,7 @@ fi if test ! "x${CONFIG_NETSNMP}" = xNo; then NETSNMP_INCLUDE=$(${CONFIG_NETSNMP} --cflags) - NETSNMP_INCLUDE=$(echo ${NETSNMP_INCLUDE} | $SED -e "s|-I|-I${NETSNMP_DIR}|g") + NETSNMP_INCLUDE=$(echo ${NETSNMP_INCLUDE} | $SED -e "s|-I|-I${NETSNMP_DIR}|g" -e "s|-std=c99||g") NETSNMP_LIB=$(${CONFIG_NETSNMP} --agent-libs) NETSNMP_LIB=$(echo ${NETSNMP_LIB} | $SED -e "s|-L|-L${NETSNMP_DIR}|g") @@ -24596,7 +24596,7 @@ else $as_echo "yes" >&6; } PBX_PJPROJECT=1 - PJPROJECT_INCLUDE="$PJPROJECT_CFLAGS" + PJPROJECT_INCLUDE=$(echo ${PJPROJECT_CFLAGS} | $SED -e "s|-std=c99||g") PJPROJECT_LIB="$PJPROJECT_LIBS" $as_echo "#define HAVE_PJPROJECT 1" >>confdefs.h @@ -25650,7 +25650,7 @@ else $as_echo "yes" >&6; } PBX_PYTHONDEV=1 - PYTHONDEV_INCLUDE="$PYTHONDEV_CFLAGS" + PYTHONDEV_INCLUDE=$(echo ${PYTHONDEV_CFLAGS} | $SED -e "s|-std=c99||g") PYTHONDEV_LIB="$PYTHONDEV_LIBS" $as_echo "#define HAVE_PYTHONDEV 1" >>confdefs.h @@ -25836,7 +25836,7 @@ else $as_echo "yes" >&6; } PBX_PORTAUDIO=1 - PORTAUDIO_INCLUDE="$PORTAUDIO_CFLAGS" + PORTAUDIO_INCLUDE=$(echo ${PORTAUDIO_CFLAGS} | $SED -e "s|-std=c99||g") PORTAUDIO_LIB="$PORTAUDIO_LIBS" $as_echo "#define HAVE_PORTAUDIO 1" >>confdefs.h @@ -32140,7 +32140,7 @@ else $as_echo "yes" >&6; } PBX_GMIME=1 - GMIME_INCLUDE="$GMIME_CFLAGS" + GMIME_INCLUDE=$(echo ${GMIME_CFLAGS} | $SED -e "s|-std=c99||g") GMIME_LIB="$GMIME_LIBS" $as_echo "#define HAVE_GMIME 1" >>confdefs.h @@ -33049,7 +33049,7 @@ fi if test ! "x${CONFIG_SDL}" = xNo; then SDL_INCLUDE=$(${CONFIG_SDL} --cflags) - SDL_INCLUDE=$(echo ${SDL_INCLUDE} | $SED -e "s|-I|-I${SDL_DIR}|g") + SDL_INCLUDE=$(echo ${SDL_INCLUDE} | $SED -e "s|-I|-I${SDL_DIR}|g" -e "s|-std=c99||g") SDL_LIB=$(${CONFIG_SDL} --libs) SDL_LIB=$(echo ${SDL_LIB} | $SED -e "s|-L|-L${SDL_DIR}|g") @@ -33577,7 +33577,7 @@ else $as_echo "yes" >&6; } PBX_GTK2=1 - GTK2_INCLUDE="$GTK2_CFLAGS" + GTK2_INCLUDE=$(echo ${GTK2_CFLAGS} | $SED -e "s|-std=c99||g") GTK2_LIB="$GTK2_LIBS" $as_echo "#define HAVE_GTK2 1" >>confdefs.h @@ -33688,7 +33688,7 @@ else $as_echo "yes" >&6; } PBX_SYSTEMD=1 - SYSTEMD_INCLUDE="$SYSTEMD_CFLAGS" + SYSTEMD_INCLUDE=$(echo ${SYSTEMD_CFLAGS} | $SED -e "s|-std=c99||g") SYSTEMD_LIB="$SYSTEMD_LIBS" $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index 26439986b..d3849ad34 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -1673,7 +1673,7 @@ struct ast_sip_sched_task; * */ struct ast_sip_sched_task *ast_sip_schedule_task(struct ast_taskprocessor *serializer, - int interval, ast_sip_task sip_task, char *name, void *task_data, + int interval, ast_sip_task sip_task, const char *name, void *task_data, enum ast_sip_scheduler_task_flags flags); /*! diff --git a/menuselect/configure b/menuselect/configure index 6e5331edd..a0aa10928 100755 --- a/menuselect/configure +++ b/menuselect/configure @@ -4392,7 +4392,7 @@ fi if test ! "x${CONFIG_LIBXML2}" = xNo; then LIBXML2_INCLUDE=$(${CONFIG_LIBXML2} --cflags) - LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g") + LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g" -e "s|-std=c99||g") LIBXML2_LIB=$(${CONFIG_LIBXML2} --libs) LIBXML2_LIB=$(echo ${LIBXML2_LIB} | $SED -e "s|-L|-L${LIBXML2_DIR}|g") @@ -4633,7 +4633,7 @@ else $as_echo "yes" >&6; } PBX_GTK2=1 - GTK2_INCLUDE="$GTK2_CFLAGS" + GTK2_INCLUDE=$(echo ${GTK2_CFLAGS} | $SED -e "s|-std=c99||g") GTK2_LIB="$GTK2_LIBS" $as_echo "#define HAVE_GTK2 1" >>confdefs.h diff --git a/res/res_pjsip/pjsip_scheduler.c b/res/res_pjsip/pjsip_scheduler.c index e4459da66..5b86a791b 100644 --- a/res/res_pjsip/pjsip_scheduler.c +++ b/res/res_pjsip/pjsip_scheduler.c @@ -60,7 +60,7 @@ struct ast_sip_sched_task { enum ast_sip_scheduler_task_flags flags; /*! the serializer to be used (if any) */ struct ast_taskprocessor *serializer; - /* A name to be associated with the task */ + /*! A name to be associated with the task */ char name[0]; }; @@ -113,7 +113,7 @@ static int run_task(void *data) delay = schtd->interval - (ast_tvdiff_ms(schtd->last_end, schtd->last_start) % schtd->interval); } - schtd->current_scheduler_id = ast_sched_add(scheduler_context, delay, push_to_serializer, (const void *)schtd); + schtd->current_scheduler_id = ast_sched_add(scheduler_context, delay, push_to_serializer, schtd); if (schtd->current_scheduler_id < 0) { schtd->interval = 0; ao2_unlock(schtd); @@ -164,28 +164,28 @@ int ast_sip_sched_task_cancel(struct ast_sip_sched_task *schtd) int ast_sip_sched_task_cancel_by_name(const char *name) { - RAII_VAR(struct ast_sip_sched_task *, schtd, NULL, ao2_cleanup); + int res; + struct ast_sip_sched_task *schtd; if (ast_strlen_zero(name)) { return -1; } - schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY | OBJ_NOLOCK); + schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY); if (!schtd) { return -1; } - return ast_sip_sched_task_cancel(schtd); + res = ast_sip_sched_task_cancel(schtd); + ao2_ref(schtd, -1); + return res; } int ast_sip_sched_task_get_times(struct ast_sip_sched_task *schtd, struct timeval *queued, struct timeval *last_start, struct timeval *last_end) { - if (!ao2_ref_and_lock(schtd)) { - return -1; - } - + ao2_lock(schtd); if (queued) { memcpy(queued, &schtd->when_queued, sizeof(struct timeval)); } @@ -195,8 +195,7 @@ int ast_sip_sched_task_get_times(struct ast_sip_sched_task *schtd, if (last_end) { memcpy(last_end, &schtd->last_end, sizeof(struct timeval)); } - - ao2_unlock_and_unref(schtd); + ao2_unlock(schtd); return 0; } @@ -204,18 +203,21 @@ int ast_sip_sched_task_get_times(struct ast_sip_sched_task *schtd, int ast_sip_sched_task_get_times_by_name(const char *name, struct timeval *queued, struct timeval *last_start, struct timeval *last_end) { - RAII_VAR(struct ast_sip_sched_task *, schtd, NULL, ao2_cleanup); + int res; + struct ast_sip_sched_task *schtd; if (ast_strlen_zero(name)) { return -1; } - schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY | OBJ_NOLOCK); + schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY); if (!schtd) { return -1; } - return ast_sip_sched_task_get_times(schtd, queued, last_start, last_end); + res = ast_sip_sched_task_get_times(schtd, queued, last_start, last_end); + ao2_ref(schtd, -1); + return res; } int ast_sip_sched_task_get_name(struct ast_sip_sched_task *schtd, char *name, size_t maxlen) @@ -224,13 +226,9 @@ int ast_sip_sched_task_get_name(struct ast_sip_sched_task *schtd, char *name, si return -1; } - if (!ao2_ref_and_lock(schtd)) { - return -1; - } - + ao2_lock(schtd); ast_copy_string(name, schtd->name, maxlen); - - ao2_unlock_and_unref(schtd); + ao2_unlock(schtd); return 0; } @@ -241,9 +239,7 @@ int ast_sip_sched_task_get_next_run(struct ast_sip_sched_task *schtd) struct timeval since_when; struct timeval now; - if (!ao2_ref_and_lock(schtd)) { - return -1; - } + ao2_lock(schtd); if (schtd->interval) { delay = schtd->interval; @@ -262,50 +258,52 @@ int ast_sip_sched_task_get_next_run(struct ast_sip_sched_task *schtd) delay = -1; } - ao2_unlock_and_unref(schtd); + ao2_unlock(schtd); return delay; } int ast_sip_sched_task_get_next_run_by_name(const char *name) { - RAII_VAR(struct ast_sip_sched_task *, schtd, NULL, ao2_cleanup); + int next_run; + struct ast_sip_sched_task *schtd; if (ast_strlen_zero(name)) { return -1; } - schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY | OBJ_NOLOCK); + schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY); if (!schtd) { return -1; } - return ast_sip_sched_task_get_next_run(schtd); + next_run = ast_sip_sched_task_get_next_run(schtd); + ao2_ref(schtd, -1); + return next_run; } int ast_sip_sched_is_task_running(struct ast_sip_sched_task *schtd) { - if (!schtd) { - return 0; - } - - return schtd->is_running; + return schtd ? schtd->is_running : 0; } int ast_sip_sched_is_task_running_by_name(const char *name) { - RAII_VAR(struct ast_sip_sched_task *, schtd, NULL, ao2_cleanup); + int is_running; + struct ast_sip_sched_task *schtd; if (ast_strlen_zero(name)) { return 0; } - schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY | OBJ_NOLOCK); + schtd = ao2_find(tasks, name, OBJ_SEARCH_KEY); if (!schtd) { return 0; } - return schtd->is_running; + is_running = schtd->is_running; + ao2_ref(schtd, -1); + return is_running; } static void schtd_destructor(void *data) @@ -321,7 +319,8 @@ static void schtd_destructor(void *data) } struct ast_sip_sched_task *ast_sip_schedule_task(struct ast_taskprocessor *serializer, - int interval, ast_sip_task sip_task, char *name, void *task_data, enum ast_sip_scheduler_task_flags flags) + int interval, ast_sip_task sip_task, const char *name, void *task_data, + enum ast_sip_scheduler_task_flags flags) { #define ID_LEN 13 /* task_deadbeef */ struct ast_sip_sched_task *schtd; @@ -352,7 +351,7 @@ struct ast_sip_sched_task *ast_sip_schedule_task(struct ast_taskprocessor *seria if (flags & AST_SIP_SCHED_TASK_DATA_AO2) { ao2_ref(task_data, +1); } - res = ast_sched_add(scheduler_context, interval, push_to_serializer, (const void *)schtd); + res = ast_sched_add(scheduler_context, interval, push_to_serializer, schtd); if (res < 0) { ao2_ref(schtd, -1); return NULL; @@ -369,14 +368,14 @@ static char *cli_show_tasks(struct ast_cli_entry *e, int cmd, struct ast_cli_arg { struct ao2_iterator i; struct ast_sip_sched_task *schtd; - const char *log_format = ast_logger_get_dateformat(); + const char *log_format; struct ast_tm tm; char queued[32]; char last_start[32]; char next_start[32]; int datelen; - struct timeval now = ast_tvnow(); - const char *separator = "======================================"; + struct timeval now; + static const char separator[] = "======================================"; switch (cmd) { case CLI_INIT: @@ -392,6 +391,9 @@ static char *cli_show_tasks(struct ast_cli_entry *e, int cmd, struct ast_cli_arg return CLI_SHOWUSAGE; } + now = ast_tvnow(); + log_format = ast_logger_get_dateformat(); + ast_localtime(&now, &tm, NULL); datelen = ast_strftime(queued, sizeof(queued), log_format, &tm); @@ -406,12 +408,16 @@ static char *cli_show_tasks(struct ast_cli_entry *e, int cmd, struct ast_cli_arg datelen, separator, separator, datelen + 8, separator); - ao2_ref(tasks, +1); ao2_rdlock(tasks); - i = ao2_iterator_init(tasks, 0); + i = ao2_iterator_init(tasks, AO2_ITERATOR_DONTLOCK); while ((schtd = ao2_iterator_next(&i))) { - int next_run_sec = ast_sip_sched_task_get_next_run(schtd) / 1000; - struct timeval next = ast_tvadd(now, (struct timeval) {next_run_sec, 0}); + int next_run_sec; + struct timeval next; + + ao2_lock(schtd); + + next_run_sec = ast_sip_sched_task_get_next_run(schtd) / 1000; + next = ast_tvadd(now, (struct timeval) {next_run_sec, 0}); ast_localtime(&schtd->when_queued, &tm, NULL); ast_strftime(queued, sizeof(queued), log_format, &tm); @@ -434,11 +440,12 @@ static char *cli_show_tasks(struct ast_cli_entry *e, int cmd, struct ast_cli_arg datelen, queued, last_start, next_start, next_run_sec); + ao2_unlock(schtd); + ao2_cleanup(schtd); } ao2_iterator_destroy(&i); ao2_unlock(tasks); - ao2_ref(tasks, -1); ast_cli(a->fd, "\n"); return CLI_SUCCESS; @@ -461,8 +468,9 @@ int ast_sip_initialize_scheduler(void) return -1; } - tasks = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, - TASK_BUCKETS, ast_sip_sched_task_hash_fn, ast_sip_sched_task_sort_fn, ast_sip_sched_task_cmp_fn); + tasks = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, + AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, TASK_BUCKETS, ast_sip_sched_task_hash_fn, + ast_sip_sched_task_sort_fn, ast_sip_sched_task_cmp_fn); if (!tasks) { ast_log(LOG_ERROR, "Failed to allocate task container. Aborting load\n"); ast_sched_context_destroy(scheduler_context); diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index d13b372be..49ab87568 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -4153,7 +4153,7 @@ static void session_outgoing_nat_hook(pjsip_tx_data *tdata, struct ast_sip_trans if (ast_sip_transport_is_local(transport_state, &our_sdp_addr) || !transport_state->localnet) { ast_debug(5, "Setting external media address to %s\n", ast_sockaddr_stringify_host(&transport_state->external_media_address)); pj_strdup2(tdata->pool, &sdp->conn->addr, ast_sockaddr_stringify_host(&transport_state->external_media_address)); - pj_strdup2(tdata->pool, &sdp->origin.addr, transport->external_media_address); + pj_strassign(&sdp->origin.addr, &sdp->conn->addr); } } |