Author: dlee Date: Mon Jan 26 09:13:08 2015 New Revision: 431095 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=431095 Log: Merged revisions 430902-431092 from http://svn.asterisk.org/svn/asterisk/branches/13
Modified: team/dlee/amqp-cdr-cel/ (props changed) team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c team/dlee/amqp-cdr-cel/apps/app_confbridge.c team/dlee/amqp-cdr-cel/apps/app_minivm.c team/dlee/amqp-cdr-cel/apps/app_voicemail.c team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c team/dlee/amqp-cdr-cel/channels/chan_iax2.c team/dlee/amqp-cdr-cel/channels/chan_misdn.c team/dlee/amqp-cdr-cel/channels/chan_sip.c team/dlee/amqp-cdr-cel/channels/chan_unistim.c team/dlee/amqp-cdr-cel/channels/sip/include/route.h team/dlee/amqp-cdr-cel/configure team/dlee/amqp-cdr-cel/configure.ac team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c team/dlee/amqp-cdr-cel/funcs/func_groupcount.c team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c team/dlee/amqp-cdr-cel/funcs/func_presencestate.c team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in team/dlee/amqp-cdr-cel/include/asterisk/bridge.h team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h team/dlee/amqp-cdr-cel/include/asterisk/channel.h team/dlee/amqp-cdr-cel/include/asterisk/sem.h team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h team/dlee/amqp-cdr-cel/main/app.c team/dlee/amqp-cdr-cel/main/asterisk.c team/dlee/amqp-cdr-cel/main/bridge.c team/dlee/amqp-cdr-cel/main/bridge_channel.c team/dlee/amqp-cdr-cel/main/config.c team/dlee/amqp-cdr-cel/main/manager_bridges.c team/dlee/amqp-cdr-cel/main/rtp_engine.c team/dlee/amqp-cdr-cel/main/sem.c team/dlee/amqp-cdr-cel/res/parking/parking_applications.c team/dlee/amqp-cdr-cel/res/res_ari_channels.c team/dlee/amqp-cdr-cel/res/res_ari_endpoints.c team/dlee/amqp-cdr-cel/res/res_ari_events.c team/dlee/amqp-cdr-cel/res/res_fax.c team/dlee/amqp-cdr-cel/res/res_pjsip/pjsip_global_headers.c team/dlee/amqp-cdr-cel/res/res_pjsip_mwi.c team/dlee/amqp-cdr-cel/res/res_pjsip_outbound_registration.c team/dlee/amqp-cdr-cel/res/res_pjsip_pubsub.c team/dlee/amqp-cdr-cel/res/res_stasis.c team/dlee/amqp-cdr-cel/res/res_timing_kqueue.c team/dlee/amqp-cdr-cel/res/stasis/app.c team/dlee/amqp-cdr-cel/res/stasis/stasis_bridge.c team/dlee/amqp-cdr-cel/rest-api-templates/param_parsing.mustache Propchange: team/dlee/amqp-cdr-cel/ ------------------------------------------------------------------------------ --- branch-11-merged (original) +++ branch-11-merged Mon Jan 26 09:13:08 2015 @@ -1,1 +1,1 @@ -/branches/11:1-429517,429539,429632,429783,429804,429825,429867,429893,429982,430009,430126,430415,430487,430506,430564,430589,430795,430798 +/branches/11:1-429517,429539,429632,429783,429804,429825,429867,429893,429982,430009,430126,430415,430487,430506,430564,430589,430795,430798,430920,430993,430996-430997,431049 Propchange: team/dlee/amqp-cdr-cel/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Mon Jan 26 09:13:08 2015 @@ -1,1 +1,1 @@ -/branches/13:1-430898 +/branches/13:1-431094 Modified: team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c (original) +++ team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c Mon Jan 26 09:13:08 2015 @@ -1909,7 +1909,7 @@ T_H245TransportAddress_unicastAddress) { OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control " - "channel addres type is not unicast (%s, %s)\n", + "channel address type is not unicast (%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } Modified: team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c (original) +++ team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c Mon Jan 26 09:13:08 2015 @@ -484,7 +484,7 @@ } /*! - * \brief Send a single tone burst for a specifed duration and frequency. + * \brief Send a single tone burst for a specified duration and frequency. * \since 11.0 * * \param chan Asterisk Channel Modified: team/dlee/amqp-cdr-cel/apps/app_confbridge.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_confbridge.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/apps/app_confbridge.c (original) +++ team/dlee/amqp-cdr-cel/apps/app_confbridge.c Mon Jan 26 09:13:08 2015 @@ -557,29 +557,31 @@ static void set_rec_filename(struct confbridge_conference *conference, struct ast_str **filename, int is_new) { char *rec_file = conference->b_profile.rec_file; + char *ext; time_t now; - char *ext; - - if (ast_str_strlen(*filename) && ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND) && !is_new) { - return; + + if (ast_str_strlen(*filename) + && ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND) + && !is_new) { + return; } time(&now); ast_str_reset(*filename); if (ast_strlen_zero(rec_file)) { - ast_str_set(filename, 0, "confbridge-%s-%u.wav", conference->name, (unsigned int)now); + ast_str_set(filename, 0, "confbridge-%s-%u.wav", conference->name, + (unsigned int) now); } else { /* insert time before file extension */ ext = strrchr(rec_file, '.'); if (ext) { ast_str_set_substr(filename, 0, rec_file, ext - rec_file); - ast_str_append(filename, 0, "-%u%s", (unsigned int)now, ext); + ast_str_append(filename, 0, "-%u%s", (unsigned int) now, ext); } else { - ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int)now); - } - } - + ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int) now); + } + } if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND)) { ast_str_append(filename, 0, ",a"); } Modified: team/dlee/amqp-cdr-cel/apps/app_minivm.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_minivm.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/apps/app_minivm.c (original) +++ team/dlee/amqp-cdr-cel/apps/app_minivm.c Mon Jan 26 09:13:08 2015 @@ -1366,7 +1366,7 @@ prep_email_sub_vars(ast, vmu, cidnum, cidname, dur, date, counter); /* Find email address to use */ - /* If there's a server e-mail adress in the account, user that, othterwise template */ + /* If there's a server e-mail address in the account, use that, othterwise template */ fromemail = ast_strlen_zero(vmu->serveremail) ? template->serveremail : vmu->serveremail; /* Find name to user for server e-mail */ Modified: team/dlee/amqp-cdr-cel/apps/app_voicemail.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_voicemail.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/apps/app_voicemail.c (original) +++ team/dlee/amqp-cdr-cel/apps/app_voicemail.c Mon Jan 26 09:13:08 2015 @@ -1098,6 +1098,8 @@ static int write_password_to_file(const char *secretfn, const char *password); static const char *substitute_escapes(const char *value); static int message_range_and_existence_check(struct vm_state *vms, const char *msg_ids [], size_t num_msgs, int *msg_nums, struct ast_vm_user *vmu); +static void notify_new_state(struct ast_vm_user *vmu); + /*! * Place a message in the indicated folder * @@ -3741,7 +3743,7 @@ /*! * \brief Retrieves a file from an ODBC data store. - * \param dir the path to the file to be retreived. + * \param dir the path to the file to be retrieved. * \param msgnum the message number, such as within a mailbox folder. * * This method is used by the RETRIEVE macro when mailboxes are stored in an ODBC back end. @@ -6373,6 +6375,7 @@ } STORE(dir, recipient->mailbox, recipient->context, msgnum, NULL, recipient, fmt, 0, vms, "", msg_id); + notify_new_state(recipient); } free_user(recipient); @@ -8011,7 +8014,7 @@ * - attempt to determine the context and and mailbox, and then invoke leave_message() function to record and store the message. * * When in the forward message mode (is_new_message == 0): - * - retreives the current message to be forwarded + * - retrieves the current message to be forwarded * - copies the original message to a temporary file, so updates to the envelope can be done. * - determines the target mailbox and folders * - copies the message into the target mailbox, using copy_message() or by generating the message into an email attachment if using imap folders. Modified: team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c (original) +++ team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c Mon Jan 26 09:13:08 2015 @@ -38,6 +38,8 @@ /* ------------------------------------------------------------------- */ +static unsigned int name_sequence = 0; + static int rec_call(struct ast_channel *chan, const char *addr, int timeout) { /* Make sure anyone calling ast_call() for this channel driver is going to fail. */ @@ -59,6 +61,7 @@ struct ast_channel *chan; const char *conf_name = data; RAII_VAR(struct ast_format_cap *, capabilities, NULL, ao2_cleanup); + int generated_seqno = ast_atomic_fetchadd_int((int *) &name_sequence, +1); capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT); if (!capabilities) { @@ -67,8 +70,8 @@ ast_format_cap_append_by_type(capabilities, AST_MEDIA_TYPE_UNKNOWN); chan = ast_channel_alloc(1, AST_STATE_UP, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, - "CBRec/conf-%s-uid-%d", - conf_name, (int) ast_random()); + "CBRec/conf-%s-uid-%08x", + conf_name, (unsigned) generated_seqno); if (!chan) { return NULL; } Modified: team/dlee/amqp-cdr-cel/channels/chan_iax2.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_iax2.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/channels/chan_iax2.c (original) +++ team/dlee/amqp-cdr-cel/channels/chan_iax2.c Mon Jan 26 09:13:08 2015 @@ -4364,7 +4364,7 @@ if (var && !ast_sockaddr_isnull(addr)) { for (tmp = var; tmp; tmp = tmp->next) { if (!strcasecmp(tmp->name, "host")) { - struct ast_sockaddr *hostaddr; + struct ast_sockaddr *hostaddr = NULL; if (!ast_sockaddr_resolve(&hostaddr, tmp->value, PARSE_PORT_FORBID, AST_AF_UNSPEC) || ast_sockaddr_cmp_addr(hostaddr, addr)) { @@ -4372,6 +4372,7 @@ ast_variables_destroy(var); var = NULL; } + ast_free(hostaddr); break; } } @@ -4486,7 +4487,7 @@ if (var) { for (tmp = var; tmp; tmp = tmp->next) { if (!strcasecmp(tmp->name, "host")) { - struct ast_sockaddr *hostaddr; + struct ast_sockaddr *hostaddr = NULL; if (!ast_sockaddr_resolve(&hostaddr, tmp->value, PARSE_PORT_FORBID, AST_AF_UNSPEC) || ast_sockaddr_cmp_addr(hostaddr, addr)) { @@ -4494,6 +4495,7 @@ ast_variables_destroy(var); var = NULL; } + ast_free(hostaddr); break; } } Modified: team/dlee/amqp-cdr-cel/channels/chan_misdn.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_misdn.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/channels/chan_misdn.c (original) +++ team/dlee/amqp-cdr-cel/channels/chan_misdn.c Mon Jan 26 09:13:08 2015 @@ -9450,11 +9450,11 @@ break; #endif /* We don't handle this yet */ case Fac_SubaddressTransfer: - /* We do not have anything to do for this message since we do not handle subaddreses. */ + /* We do not have anything to do for this message since we do not handle subaddresses. */ break; case Fac_RequestSubaddress: /* - * We do not have anything to do for this message since we do not handle subaddreses. + * We do not have anything to do for this message since we do not handle subaddresses. * However, we do care about some other ie's that should be present. */ if (bc->redirecting.to_changed) { Modified: team/dlee/amqp-cdr-cel/channels/chan_sip.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_sip.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/channels/chan_sip.c (original) +++ team/dlee/amqp-cdr-cel/channels/chan_sip.c Mon Jan 26 09:13:08 2015 @@ -8808,7 +8808,7 @@ * This function will update the destination of the response according to the * Via header in the request and RFC 3261 section 18.2.2. We do not have a * transport layer so we ignore certain values like the 'received' param (we - * set the destination address to the addres the request came from in the + * set the destination address to the address the request came from in the * respprep() function). * * \retval -1 error @@ -30578,7 +30578,7 @@ if (peer->callingpres == -1) { peer->callingpres = atoi(v->value); } - } else if (!strcasecmp(v->name, "username") || !strcmp(v->name, "defaultuser")) { /* "username" is deprecated */ + } else if (!strcasecmp(v->name, "username") || !strcasecmp(v->name, "defaultuser")) { /* "username" is deprecated */ ast_string_field_set(peer, username, v->value); if (!strcasecmp(v->name, "username")) { if (deprecation_warning) { Modified: team/dlee/amqp-cdr-cel/channels/chan_unistim.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_unistim.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/channels/chan_unistim.c (original) +++ team/dlee/amqp-cdr-cel/channels/chan_unistim.c Mon Jan 26 09:13:08 2015 @@ -468,7 +468,7 @@ int state; /*!< state of the phone (see phone_state) */ int size_buff_entry; /*!< size of the buffer used to enter datas */ char buff_entry[16]; /*!< Buffer for temporary datas */ - char macaddr[18]; /*!< mac adress of the phone (not always available) */ + char macaddr[18]; /*!< mac address of the phone (not always available) */ char firmware[8]; /*!< firmware of the phone (not always available) */ struct wsabuf wsabufsend[MAX_BUF_NUMBER]; /*!< Size of each paquet stored in the buffer array & pointer to this buffer */ unsigned char buf[MAX_BUF_NUMBER][MAX_BUF_SIZE]; /*!< Buffer array used to keep the lastest non-acked paquets */ Modified: team/dlee/amqp-cdr-cel/channels/sip/include/route.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/sip/include/route.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/channels/sip/include/route.h (original) +++ team/dlee/amqp-cdr-cel/channels/sip/include/route.h Mon Jan 26 09:13:08 2015 @@ -98,7 +98,7 @@ * \retval NULL on failure */ struct ast_str *sip_route_list(const struct sip_route *route, int formatcli, int skip) - __attribute_malloc__ __attribute_warn_unused_result__; + __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); /*! * \brief Check if the route is strict Modified: team/dlee/amqp-cdr-cel/configure.ac URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/configure.ac?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/configure.ac (original) +++ team/dlee/amqp-cdr-cel/configure.ac Mon Jan 26 09:13:08 2015 @@ -661,7 +661,25 @@ AC_FUNC_STRTOD AC_FUNC_UTIME_NULL AC_FUNC_VPRINTF -AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ffsll ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob htonll ioperm inet_ntoa isascii memchr memmove memset mkdir mkdtemp munmap ntohll newlocale ppoll putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtod strtol strtold strtoq unsetenv utime vasprintf getpeereid sysctl swapctl]) +AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ffsll ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob ioperm inet_ntoa isascii memchr memmove memset mkdir mkdtemp munmap newlocale ppoll putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtod strtol strtold strtoq unsetenv utime vasprintf getpeereid sysctl swapctl]) + +AC_MSG_CHECKING(for htonll) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <arpa/inet.h>], + [return htonll(0);])], + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_HTONLL, 1, [Define to 1 if arpa/inet.h includes a htonll definition.]), + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(for ntohll) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <arpa/inet.h>], + [return ntohll(0);])], + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NTOHLL, 1, [Define to 1 if arpa/inet.h includes a ntohll definition.]), + AC_MSG_RESULT(no) +) # NOTE: we use AC_CHECK_LIB to get -lm into the arguments for later checks, # so that AC_CHECK_FUNCS can detect functions in that library. @@ -2435,10 +2453,9 @@ PBX_LAUNCHD=0 if test "${cross_compiling}" = "no"; then - AC_CHECK_FILE(/sbin/launchd, AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.])) - if test "${HAVE_SBIN_LAUNCHD}" = 1; then - PBX_LAUNCHD=1 - fi + AC_CHECK_FILE(/sbin/launchd, + [PBX_LAUNCHD=1] + AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.])) fi AC_SUBST(PBX_LAUNCHD) Modified: team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c (original) +++ team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c Mon Jan 26 09:13:08 2015 @@ -223,7 +223,7 @@ struct sockaddr_in host; - /* get adress */ + /* get address */ if(!strcmp(name,"localhost")) address=htonl(2130706433); /*127.0.0.1*/ else Modified: team/dlee/amqp-cdr-cel/funcs/func_groupcount.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_groupcount.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/funcs/func_groupcount.c (original) +++ team/dlee/amqp-cdr-cel/funcs/func_groupcount.c Mon Jan 26 09:13:08 2015 @@ -50,7 +50,7 @@ </syntax> <description> <para>Calculates the group count for the specified group, or uses the - channel's current group if not specifed (and non-empty).</para> + channel's current group if not specified (and non-empty).</para> </description> </function> <function name="GROUP_MATCH_COUNT" language="en_US"> Modified: team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c (original) +++ team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c Mon Jan 26 09:13:08 2015 @@ -48,7 +48,7 @@ </synopsis> <syntax> <parameter name="channel" required="true"> - <para>The name of the channel for which to retreive cause information.</para> + <para>The name of the channel for which to retrieve cause information.</para> </parameter> <parameter name="type" required="true"> <para>Parameter describing which type of information is requested. Types are:</para> Modified: team/dlee/amqp-cdr-cel/funcs/func_presencestate.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_presencestate.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/funcs/func_presencestate.c (original) +++ team/dlee/amqp-cdr-cel/funcs/func_presencestate.c Mon Jan 26 09:13:08 2015 @@ -41,7 +41,7 @@ #include "asterisk/app.h" #ifdef TEST_FRAMEWORK #include "asterisk/test.h" -#include <semaphore.h> +#include "asterisk/sem.h" #endif /*** DOCUMENTATION @@ -664,7 +664,7 @@ struct test_cb_data { struct ast_presence_state_message *presence_state; /* That's right. I'm using a semaphore */ - sem_t sem; + struct ast_sem sem; }; static struct test_cb_data *test_cb_data_alloc(void) @@ -675,7 +675,7 @@ return NULL; } - if (sem_init(&cb_data->sem, 0, 0)) { + if (ast_sem_init(&cb_data->sem, 0, 0)) { ast_free(cb_data); return NULL; } @@ -686,7 +686,7 @@ static void test_cb_data_destroy(struct test_cb_data *cb_data) { ao2_cleanup(cb_data->presence_state); - sem_destroy(&cb_data->sem); + ast_sem_destroy(&cb_data->sem); ast_free(cb_data); } @@ -699,7 +699,7 @@ cb_data->presence_state = stasis_message_data(msg); ao2_ref(cb_data->presence_state, +1); - sem_post(&cb_data->sem); + ast_sem_post(&cb_data->sem); } static enum ast_test_result_state presence_change_common(struct ast_test *test, @@ -727,7 +727,7 @@ return AST_TEST_FAIL; } - sem_wait(&cb_data->sem); + ast_sem_wait(&cb_data->sem); ast_copy_string(out_state, ast_presence_state2str(cb_data->presence_state->state), out_state_size); ast_copy_string(out_subtype, cb_data->presence_state->subtype, out_subtype_size); Modified: team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in Mon Jan 26 09:13:08 2015 @@ -324,7 +324,7 @@ /* Define to 1 if you have the Hoard Memory Allocator library. */ #undef HAVE_HOARD -/* Define to 1 if you have the `htonll' function. */ +/* Define to 1 if arpa/inet.h includes a htonll definition. */ #undef HAVE_HTONLL /* Define to 1 if you have the iCal library. */ @@ -524,7 +524,7 @@ /* Define to 1 if you have the newt library. */ #undef HAVE_NEWT -/* Define to 1 if you have the `ntohll' function. */ +/* Define to 1 if arpa/inet.h includes a ntohll definition. */ #undef HAVE_NTOHLL /* Define to 1 if your C library can safely print NULL to string formats. */ Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/bridge.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/bridge.h Mon Jan 26 09:13:08 2015 @@ -444,14 +444,18 @@ }; /*! - * \brief Join (blocking) a channel to a bridge + * \brief Join a channel to a bridge (blocking) * * \param bridge Bridge to join * \param chan Channel to join - * \param swap Channel to swap out if swapping + * \param swap Channel to swap out if swapping (A channel reference is stolen.) * \param features Bridge features structure * \param tech_args Optional Bridging tech optimization parameters for this channel. * \param flags defined by enum ast_bridge_join_flags. + * + * \note The passed in swap channel is always unreffed on return. It is not a + * good idea to access the swap channel on return or for the caller to keep a + * reference to it. * * \note Absolutely _NO_ locks should be held before calling * this function since it blocks. @@ -495,7 +499,7 @@ }; /*! - * \brief Impart (non-blocking) a channel onto a bridge + * \brief Impart a channel to a bridge (non-blocking) * * \param bridge Bridge to impart on * \param chan Channel to impart (The channel reference is stolen if impart successful.) Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h Mon Jan 26 09:13:08 2015 @@ -103,6 +103,9 @@ * * \param bridge_channel Channel to push. * + * \note A ref is not held by bridge_channel->swap when calling because the + * push with swap happens immediately. + * * \note On entry, bridge_channel->bridge is already locked. * * \retval 0 on success. @@ -128,16 +131,22 @@ /*! * \internal - * \brief Join the bridge_channel to the bridge + * \brief Join the bridge_channel to the bridge (blocking) * * \param bridge_channel The Channel in the bridge + * + * \note The bridge_channel->swap holds a channel reference for the swap + * channel going into the bridging system. The ref ensures that the swap + * pointer is valid for the bridge subclass push callbacks. The pointer + * will be NULL on return if the ref was consumed. + * + * \details + * This API call puts the bridge_channel into the bridge and handles the + * bridge_channel's processing of events while it is in the bridge. It + * will return when the channel has been instructed to leave the bridge. * * \retval 0 bridge channel successfully joined the bridge * \retval -1 bridge channel failed to join the bridge - * - * \note This API call starts the bridge_channel's processing of events while - * it is in the bridge. It will return when the channel has been instructed to - * leave the bridge. */ int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel); Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h Mon Jan 26 09:13:08 2015 @@ -117,6 +117,9 @@ * \param attempt_recovery TRUE if failure attempts to push channel back into original bridge. * \param optimized Indicates whether the move is part of an unreal channel optimization. * + * \note A ref is not held by bridge_channel->swap when calling because the + * move with swap happens immediately. + * * \note The dst_bridge and bridge_channel->bridge are assumed already locked. * * \retval 0 on success. Modified: team/dlee/amqp-cdr-cel/include/asterisk/channel.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/channel.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/channel.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/channel.h Mon Jan 26 09:13:08 2015 @@ -4186,13 +4186,13 @@ /*! * \since 11 - * \brief Retreive a comma-separated list of channels for which dialed cause information is available + * \brief Retrieve a comma-separated list of channels for which dialed cause information is available * * \details * This function makes use of datastore operations on the channel, so * it is important to lock the channel before calling this function. * - * \param chan The channel from which to retreive information + * \param chan The channel from which to retrieve information * \retval NULL on allocation failure * \retval Pointer to an ast_str object containing the desired information which must be freed */ @@ -4200,7 +4200,7 @@ /*! * \since 11 - * \brief Retreive a ref-counted cause code information structure + * \brief Retrieve a ref-counted cause code information structure * * \details * This function makes use of datastore operations on the channel, so @@ -4209,8 +4209,8 @@ * calling function must decrease the reference count when it is finished * with the object. * - * \param chan The channel from which to retreive information - * \param chan_name The name of the channel about which to retreive information + * \param chan The channel from which to retrieve information + * \param chan_name The name of the channel about which to retrieve information * \retval NULL on search failure * \retval Pointer to a ref-counted ast_control_pvt_cause_code object containing the desired information */ Modified: team/dlee/amqp-cdr-cel/include/asterisk/sem.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/sem.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/sem.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/sem.h Mon Jan 26 09:13:08 2015 @@ -57,6 +57,11 @@ static force_inline int ast_sem_wait(struct ast_sem *sem) { return sem_wait(&sem->real_sem); +} + +static force_inline int ast_sem_timedwait(struct ast_sem *sem, const struct timespec *abs_timeout) +{ + return sem_timedwait(&sem->real_sem, abs_timeout); } static force_inline int ast_sem_getvalue(struct ast_sem *sem, int *sval) @@ -137,6 +142,20 @@ int ast_sem_wait(struct ast_sem *sem); /*! + * \brief Decrements the semaphore, waiting until abs_timeout. + * + * If the semaphore's current value is zero, this function blocks until another + * thread posts (ast_sem_post()) to the semaphore (or is interrupted by a signal + * handler, which sets errno to EINTR). + * + * \param sem Semaphore to decrement. + * + * \return 0 on success. + * \return -1 on error, errno set to indicate error. + */ +int ast_sem_timedwait(struct ast_sem *sem, const struct timespec *abs_timeout); + +/*! * \brief Gets the current value of the semaphore. * * If threads are blocked on this semaphore, POSIX allows the return value to be Modified: team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h (original) +++ team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h Mon Jan 26 09:13:08 2015 @@ -245,8 +245,7 @@ * \param event_name Name of the Userevent. * \param source_uris URIs for the source objects to attach to event. * \param sources_count Array size of source_uris. - * \param userevent_data Custom parameters for the user event - * \param userevents_count Array size of userevent_data + * \param json_variables event blob variables. * * \return \ref stasis_app_user_event_res return code. */ Modified: team/dlee/amqp-cdr-cel/main/app.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/app.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/main/app.c (original) +++ team/dlee/amqp-cdr-cel/main/app.c Mon Jan 26 09:13:08 2015 @@ -2911,7 +2911,9 @@ ast_replace_sigchld(); } - sigfillset(&signal_set); + /* GCC 4.9 gives a bogus "right-hand operand of comma expression has + * no effect" warning */ + (void) sigfillset(&signal_set); pthread_sigmask(SIG_BLOCK, &signal_set, &old_set); pid = fork(); Modified: team/dlee/amqp-cdr-cel/main/asterisk.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/asterisk.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/main/asterisk.c (original) +++ team/dlee/amqp-cdr-cel/main/asterisk.c Mon Jan 26 09:13:08 2015 @@ -4366,12 +4366,14 @@ } ast_makesocket(); - sigemptyset(&sigs); - sigaddset(&sigs, SIGHUP); - sigaddset(&sigs, SIGTERM); - sigaddset(&sigs, SIGINT); - sigaddset(&sigs, SIGPIPE); - sigaddset(&sigs, SIGWINCH); + /* GCC 4.9 gives a bogus "right-hand operand of comma expression has + * no effect" warning */ + (void) sigemptyset(&sigs); + (void) sigaddset(&sigs, SIGHUP); + (void) sigaddset(&sigs, SIGTERM); + (void) sigaddset(&sigs, SIGINT); + (void) sigaddset(&sigs, SIGPIPE); + (void) sigaddset(&sigs, SIGWINCH); pthread_sigmask(SIG_BLOCK, &sigs, NULL); sigaction(SIGURG, &urg_handler, NULL); signal(SIGINT, __quit_handler); Modified: team/dlee/amqp-cdr-cel/main/bridge.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/bridge.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/main/bridge.c (original) +++ team/dlee/amqp-cdr-cel/main/bridge.c Mon Jan 26 09:13:08 2015 @@ -1560,6 +1560,7 @@ ao2_ref(bridge, -1); } if (!bridge_channel) { + ao2_t_cleanup(swap, "Error exit: bridge_channel alloc failed"); res = -1; goto join_exit; } @@ -1567,6 +1568,7 @@ ast_assert(features != NULL); if (!features) { ao2_ref(bridge_channel, -1); + ao2_t_cleanup(swap, "Error exit: features is NULL"); res = -1; goto join_exit; } @@ -1596,6 +1598,8 @@ ast_channel_internal_bridge_channel_set(chan, NULL); ast_channel_unlock(chan); bridge_channel->chan = NULL; + /* If bridge_channel->swap is not NULL then the join failed. */ + ao2_t_cleanup(bridge_channel->swap, "Bridge complete: join failed"); bridge_channel->swap = NULL; bridge_channel->features = NULL; @@ -1624,7 +1628,12 @@ bridge_channel_internal_join(bridge_channel); - /* cleanup */ + /* + * cleanup + * + * If bridge_channel->swap is not NULL then the join failed. + */ + ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Departable impart join failed"); bridge_channel->swap = NULL; ast_bridge_features_destroy(bridge_channel->features); bridge_channel->features = NULL; @@ -1653,6 +1662,8 @@ ast_channel_internal_bridge_channel_set(chan, NULL); ast_channel_unlock(chan); bridge_channel->chan = NULL; + /* If bridge_channel->swap is not NULL then the join failed. */ + ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Independent impart join failed"); bridge_channel->swap = NULL; ast_bridge_features_destroy(bridge_channel->features); bridge_channel->features = NULL; @@ -1706,7 +1717,7 @@ } ast_channel_unlock(chan); bridge_channel->chan = chan; - bridge_channel->swap = swap; + bridge_channel->swap = ao2_t_bump(swap, "Setting up bridge impart"); bridge_channel->features = features; bridge_channel->inhibit_colp = !!(flags & AST_BRIDGE_IMPART_INHIBIT_JOIN_COLP); bridge_channel->depart_wait = @@ -1730,6 +1741,7 @@ ast_channel_internal_bridge_channel_set(chan, NULL); ast_channel_unlock(chan); bridge_channel->chan = NULL; + ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Impart failed"); bridge_channel->swap = NULL; ast_bridge_features_destroy(bridge_channel->features); bridge_channel->features = NULL; @@ -2171,7 +2183,11 @@ /* * The channel died as a result of being pulled. Leave it * pointing to the original bridge. + * + * Clear out the swap channel pointer. A ref is not held + * by bridge_channel->swap at this point. */ + bridge_channel->swap = NULL; bridge_reconfigured(orig_bridge, 0); return -1; } Modified: team/dlee/amqp-cdr-cel/main/bridge_channel.c URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/bridge_channel.c?view=diff&rev=431095&r1=431094&r2=431095 ============================================================================== --- team/dlee/amqp-cdr-cel/main/bridge_channel.c (original) +++ team/dlee/amqp-cdr-cel/main/bridge_channel.c Mon Jan 26 09:13:08 2015 @@ -35,7 +35,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include <signal.h> -#include <semaphore.h> #include "asterisk/heap.h" #include "asterisk/astobj2.h" @@ -56,6 +55,7 @@ #include "asterisk/parking.h" #include "asterisk/causes.h" #include "asterisk/test.h" +#include "asterisk/sem.h" /*! * \brief Used to queue an action frame onto a bridge channel and write an action frame into a bridge. @@ -101,7 +101,7 @@ /*! Unique ID of this synchronization object. Corresponds with ID in synchronous frame payload */ unsigned int id; /*! Semaphore used for synchronization */ - sem_t sem; + struct ast_sem sem; /*! Pointer to next entry in the list */ AST_LIST_ENTRY(bridge_sync) list; }; @@ -124,7 +124,7 @@ { memset(sync_struct, 0, sizeof(*sync_struct)); sync_struct->id = id; - sem_init(&sync_struct->sem, 0, 0); + ast_sem_init(&sync_struct->sem, 0, 0); AST_RWLIST_WRLOCK(&sync_structs); AST_RWLIST_INSERT_TAIL(&sync_structs, sync_struct, list); @@ -157,7 +157,7 @@ AST_LIST_TRAVERSE_SAFE_END; AST_RWLIST_UNLOCK(&sync_structs); - sem_destroy(&sync_struct->sem); + ast_sem_destroy(&sync_struct->sem); } /*! @@ -189,7 +189,7 @@ .tv_nsec = timeout_val.tv_usec * 1000, }; - sem_timedwait(&sync_struct->sem, &timeout_spec); + ast_sem_timedwait(&sync_struct->sem, &timeout_spec); } /*! @@ -204,7 +204,7 @@ */ static void bridge_sync_signal(struct bridge_sync *sync_struct) { - sem_post(&sync_struct->sem); + ast_sem_post(&sync_struct->sem); } void ast_bridge_channel_lock_bridge(struct ast_bridge_channel *bridge_channel) @@ -2490,11 +2490,11 @@ ao2_iterator_destroy(&iter); } -/*! \brief Join a channel to a bridge and handle anything the bridge may want us to do */ int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel) { int res = 0; struct ast_bridge_features *channel_features; + struct ast_channel *swap; ast_debug(1, "Bridge %s: %p(%s) is joining\n", bridge_channel->bridge->uniqueid, @@ -2538,6 +2538,9 @@ bridge_channel->bridge->callid = ast_read_threadstorage_callid(); } + /* Take the swap channel ref from the bridge_channel struct. */ + swap = bridge_channel->swap; + if (bridge_channel_internal_push(bridge_channel)) { int cause = bridge_channel->bridge->cause; @@ -2563,6 +2566,11 @@ } ast_bridge_unlock(bridge_channel->bridge); + + /* Must release any swap ref after unlocking the bridge. */ + ao2_t_cleanup(swap, "Bridge push with swap successful"); + swap = NULL; + [... 569 lines stripped ...] -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits