diff options
33 files changed, 244 insertions, 508 deletions
diff --git a/Makefile.rules b/Makefile.rules index e6427172d..e4b174577 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -51,13 +51,8 @@ endif # per-target settings will be applied CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS) CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(ASTCFLAGS)) - -ifeq ($(GNU_LD),1) -SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(if $(wildcard $(subst .so,.exports,$@)),$(subst .so,.exports,$@),$(ASTTOPDIR)/default.exports) -endif - -CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) -CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) +CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) +CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) CC_LIBS=$(PTHREAD_LIBS) $(LIBS) CXX_LIBS=$(PTHREAD_LIBS) $(LIBS) diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c index 3f19b04af..18e4972a5 100644 --- a/apps/app_chanspy.c +++ b/apps/app_chanspy.c @@ -171,7 +171,7 @@ static void spy_release(struct ast_channel *chan, void *data) static int spy_generate(struct ast_channel *chan, void *data, int len, int samples) { struct chanspy_translation_helper *csth = data; - struct ast_frame *f, *cur; + struct ast_frame *f; ast_audiohook_lock(&csth->spy_audiohook); if (csth->spy_audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING) { @@ -186,16 +186,14 @@ static int spy_generate(struct ast_channel *chan, void *data, int len, int sampl if (!f) return 0; - for (cur = f; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - if (ast_write(chan, cur)) { - ast_frfree(f); - return -1; - } + if (ast_write(chan, f)) { + ast_frfree(f); + return -1; + } - if (csth->fd) { - if (write(csth->fd, cur->data, cur->datalen) < 0) { - ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno)); - } + if (csth->fd) { + if (write(csth->fd, f->data, f->datalen) < 0) { + ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno)); } } diff --git a/apps/app_meetme.c b/apps/app_meetme.c index a314a79f0..67c851a2c 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -2338,19 +2338,9 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c } } if (conf->transframe[index]) { - if ((conf->transframe[index]->frametype != AST_FRAME_NULL) && - can_write(chan, confflags)) { - struct ast_frame *cur; - - /* the translator may have returned a list of frames, so - write each one onto the channel - */ - for (cur = conf->transframe[index]; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - if (ast_write(chan, cur)) { - ast_log(LOG_WARNING, "Unable to write frame to channel %s\n", chan->name); - break; - } - } + if (conf->transframe[index]->frametype != AST_FRAME_NULL) { + if (can_write(chan, confflags) && ast_write(chan, conf->transframe[index])) + ast_log(LOG_WARNING, "Unable to write frame to channel %s\n", chan->name); } } else { ast_mutex_unlock(&conf->listenlock); diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c index f1a1624a8..4d5f5be26 100644 --- a/apps/app_mixmonitor.c +++ b/apps/app_mixmonitor.c @@ -229,14 +229,9 @@ static void *mixmonitor_thread(void *obj) } } - /* Write out the frame(s) */ - if (fs) { - struct ast_frame *cur; - - for (cur = fr; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - ast_writestream(fs, cur); - } - } + /* Write out the frame */ + if (fs) + ast_writestream(fs, fr); } else { ast_mutex_unlock(&mixmonitor->mixmonitor_ds->lock); } diff --git a/build_tools/cflags-devmode.xml b/build_tools/cflags-devmode.xml index 9ce9a68d5..8be92e71f 100644 --- a/build_tools/cflags-devmode.xml +++ b/build_tools/cflags-devmode.xml @@ -12,4 +12,6 @@ </member> <member name="MTX_PROFILE" displayname="Enable Code Profiling Using TSC Counters"> </member> + <member name="TRACE_FRAMES" displayname="Trace Frame Allocations"> + </member> </category> diff --git a/build_tools/strip_nonapi b/build_tools/strip_nonapi new file mode 100755 index 000000000..ade30c978 --- /dev/null +++ b/build_tools/strip_nonapi @@ -0,0 +1,37 @@ +#!/bin/sh -e + +# This script is designed to remove all non-API global symbols from an object +# file. The only global symbols that should be retained are those that belong +# to the official namespace. Unfortunately doing this is platform-specific, as +# the object file manipulation tools are not consistent across platforms. +# +# On platforms where this script does not know what to do, the object file +# will retain non-API global symbols, and this may have unpleasant side effects. +# +# Prefixes that belong to the official namespace are: +# ast_ +# _ast_ +# __ast_ +# astman_ +# pbx_ + +case "${PROC}" in + powerpc64) + TEXTSYM=" D " + ;; + *) + TEXTSYM=" T " + ;; +esac + +FILTER="${GREP} -v -e ^ast_ -e ^_ast_ -e ^__ast_ -e ^astman_ -e ^pbx_" + +case "${OSARCH}" in + linux-gnu) + nm ${1} | ${GREP} -e "$TEXTSYM" | cut -d" " -f3 | ${FILTER} > striplist + sed -e "s/^/-N /" striplist | xargs -n 40 ${STRIP} ${1} + rm -f striplist + ;; + *) + ;; +esac diff --git a/default.exports b/default.exports deleted file mode 100644 index 5e767549c..000000000 --- a/default.exports +++ /dev/null @@ -1,4 +0,0 @@ -{ - local: - *; -}; diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h index ec841b888..dd154ec85 100644 --- a/include/asterisk/astobj2.h +++ b/include/asterisk/astobj2.h @@ -188,15 +188,15 @@ int ao2_ref(void *o, int delta); #ifndef DEBUG_THREADS int ao2_lock(void *a); #else -#define ao2_lock(a) __ao2_lock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int __ao2_lock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_lock(a) _ao2_lock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int _ao2_lock(void *a, const char *file, const char *func, int line, const char *var); #endif #ifndef DEBUG_THREADS int ao2_trylock(void *a); #else -#define ao2_trylock(a) __ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int __ao2_trylock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_trylock(a) _ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int _ao2_trylock(void *a, const char *file, const char *func, int line, const char *var); #endif /*! @@ -208,8 +208,8 @@ int __ao2_trylock(void *a, const char *file, const char *func, int line, const c #ifndef DEBUG_THREADS int ao2_unlock(void *a); #else -#define ao2_unlock(a) __ao2_unlock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int __ao2_unlock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_unlock(a) _ao2_unlock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int _ao2_unlock(void *a, const char *file, const char *func, int line, const char *var); #endif /*! diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h index f874643c0..bb5026908 100644 --- a/include/asterisk/frame.h +++ b/include/asterisk/frame.h @@ -399,9 +399,9 @@ struct ast_frame *ast_fralloc(char *source, int len); #endif /*! - * \brief Frees a frame or list of frames + * \brief Frees a frame * - * \param fr Frame to free, or head of list to free + * \param fr Frame to free * \param cache Whether to consider this frame for frame caching */ void ast_frame_free(struct ast_frame *fr, int cache); @@ -415,11 +415,6 @@ void ast_frame_free(struct ast_frame *fr, int cache); * data malloc'd. If you need to store frames, say for queueing, then * you should call this function. * \return Returns a frame on success, NULL on error - * \note This function may modify the frame passed to it, so you must - * not assume the frame will be intact after the isolated frame has - * been produced. In other words, calling this function on a frame - * should be the last operation you do with that frame before freeing - * it (or exiting the block, if the frame is on the stack.) */ struct ast_frame *ast_frisolate(struct ast_frame *fr); diff --git a/include/asterisk/linkedlists.h b/include/asterisk/linkedlists.h index 7981c556c..bd7f6a9b1 100644 --- a/include/asterisk/linkedlists.h +++ b/include/asterisk/linkedlists.h @@ -685,7 +685,7 @@ struct { \ \param head This is a pointer to the list head structure \param list This is a pointer to the list to be appended. \param field This is the name of the field (declared using AST_LIST_ENTRY()) - used to link entries of the lists together. + used to link entries of this list together. Note: The source list (the \a list parameter) will be empty after calling this macro (the list entries are \b moved to the target list). @@ -705,30 +705,6 @@ struct { \ #define AST_RWLIST_APPEND_LIST AST_LIST_APPEND_LIST /*! - \brief Inserts a whole list after a specific entry in a list - \param head This is a pointer to the list head structure - \param list This is a pointer to the list to be inserted. - \param elm This is a pointer to the entry after which the new list should - be inserted. - \param field This is the name of the field (declared using AST_LIST_ENTRY()) - used to link entries of the lists together. - - Note: The source list (the \a list parameter) will be empty after - calling this macro (the list entries are \b moved to the target list). - */ -#define AST_LIST_INSERT_LIST_AFTER(head, list, elm, field) do { \ - (list)->last->field.next = (elm)->field.next; \ - (elm)->field.next = (list)->first; \ - if ((head)->last == elm) { \ - (head)->last = (list)->last; \ - } \ - (list)->first = NULL; \ - (list)->last = NULL; \ -} while(0) - -#define AST_RWLIST_INSERT_LIST_AFTER AST_LIST_INSERT_LIST_AFTER - -/*! \brief Removes and returns the head entry from a list. \param head This is a pointer to the list head structure \param field This is the name of the field (declared using AST_LIST_ENTRY()) diff --git a/main/Makefile b/main/Makefile index 0b83191e0..c8a878378 100644 --- a/main/Makefile +++ b/main/Makefile @@ -94,10 +94,6 @@ ifeq ($(OSARCH),SunOS) ASTLINK= endif -ifeq ($(GNU_LD),1) -ASTLINK+=-Wl,--version-script,asterisk.exports -endif - editline/libedit.a: cd editline && test -f config.h || CFLAGS="$(PTHREAD_CFLAGS) $(subst $(ASTTOPDIR),../../,$(ASTCFLAGS:-Werror=))" LDFLAGS="$(ASTLDFLAGS)" ./configure --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-ncurses=$(NCURSES_DIR) --with-curses=$(CURSES_DIR) --with-termcap=$(TERMCAP_DIR) --with-tinfo=$(TINFO_DIR) $(MAKE) -C editline libedit.a @@ -137,19 +133,20 @@ else H323LDLIBS= endif -asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) asterisk.exports +asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) @$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp @if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \ mv $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; \ fi @rm -f $(ASTTOPDIR)/include/asterisk/build.h.tmp @$(CC) -c -o buildinfo.o $(ASTCFLAGS) buildinfo.c - $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@" + $(ECHO_PREFIX) echo " [LD] $^ -> $@" ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),) - $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) + $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) else - $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) + $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) endif + $(CMD_PREFIX) $(ASTTOPDIR)/build_tools/strip_nonapi $@ || rm $@ clean:: rm -f asterisk diff --git a/main/asterisk.exports b/main/asterisk.exports deleted file mode 100644 index f18c0fff0..000000000 --- a/main/asterisk.exports +++ /dev/null @@ -1,28 +0,0 @@ -{ - global: - ast_*; - _ast_*; - __ast_*; - pbx_*; - astman_*; - ao2_*; - __ao2_*; - option_debug; - option_verbose; - dahdi_chan_name; - dahdi_chan_name_len; - dahdi_chan_mode; - cid_di; - cid_dr; - clidsb; - MD5*; - sched_*; - io_*; - jb_*; - channelreloadreason2txt; - devstate2str; - manager_event; - dialed_interface_info; - local: - *; -}; diff --git a/main/astobj2.c b/main/astobj2.c index 8157c78cf..56ab75a21 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -128,7 +128,7 @@ static inline struct astobj2 *INTERNAL_OBJ(void *user_data) #ifndef DEBUG_THREADS int ao2_lock(void *user_data) #else -int __ao2_lock(void *user_data, const char *file, const char *func, int line, const char *var) +int _ao2_lock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); @@ -150,7 +150,7 @@ int __ao2_lock(void *user_data, const char *file, const char *func, int line, co #ifndef DEBUG_THREADS int ao2_trylock(void *user_data) #else -int __ao2_trylock(void *user_data, const char *file, const char *func, int line, const char *var) +int _ao2_trylock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); @@ -177,7 +177,7 @@ int __ao2_trylock(void *user_data, const char *file, const char *func, int line, #ifndef DEBUG_THREADS int ao2_unlock(void *user_data) #else -int __ao2_unlock(void *user_data, const char *file, const char *func, int line, const char *var) +int _ao2_unlock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); diff --git a/main/autoservice.c b/main/autoservice.c index 8bcf81742..1150c4c7f 100644 --- a/main/autoservice.c +++ b/main/autoservice.c @@ -168,22 +168,15 @@ static void *autoservice_run(void *ign) continue; } - if (defer_frame != f) { - if ((dup_f = ast_frdup(defer_frame))) { - AST_LIST_INSERT_HEAD(&ents[i]->deferred_frames, dup_f, frame_list); - } - } else { - if ((dup_f = ast_frisolate(defer_frame))) { - if (dup_f != defer_frame) { - ast_frfree(defer_frame); - } - AST_LIST_INSERT_HEAD(&ents[i]->deferred_frames, dup_f, frame_list); - } + if ((dup_f = ast_frdup(defer_frame))) { + AST_LIST_INSERT_HEAD(&ents[i]->deferred_frames, dup_f, frame_list); } break; } - } else if (f) { + } + + if (f) { ast_frfree(f); } } diff --git a/main/channel.c b/main/channel.c index 16fe23b24..475942163 100644 --- a/main/channel.c +++ b/main/channel.c @@ -895,90 +895,60 @@ alertpipe_failed: } /*! \brief Queue an outgoing media frame */ -static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, int head, struct ast_frame *after) +static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, int head) { struct ast_frame *f; struct ast_frame *cur; int blah = 1; - unsigned int new_frames = 0; - unsigned int new_voice_frames = 0; - unsigned int queued_frames = 0; - unsigned int queued_voice_frames = 0; - - AST_LIST_HEAD_NOLOCK(, ast_frame) frames; - - /* Build copies of all the frames and count them */ - AST_LIST_HEAD_INIT_NOLOCK(&frames); - for (cur = fin; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - if (!(f = ast_frdup(cur))) { - ast_frfree(AST_LIST_FIRST(&frames)); - return -1; - } + int qlen = 0; - AST_LIST_INSERT_TAIL(&frames, f, frame_list); - new_frames++; - if (f->frametype == AST_FRAME_VOICE) { - new_voice_frames++; - } + /* Build us a copy and free the original one */ + if (!(f = ast_frdup(fin))) { + return -1; } ast_channel_lock(chan); /* See if the last frame on the queue is a hangup, if so don't queue anything */ if ((cur = AST_LIST_LAST(&chan->readq)) && (cur->frametype == AST_FRAME_CONTROL) && (cur->subclass == AST_CONTROL_HANGUP)) { - while ((f = AST_LIST_REMOVE_HEAD(&frames, frame_list))) { - ast_frfree(f); - } + ast_frfree(f); ast_channel_unlock(chan); return 0; } /* Count how many frames exist on the queue */ AST_LIST_TRAVERSE(&chan->readq, cur, frame_list) { - queued_frames++; - if (cur->frametype == AST_FRAME_VOICE) { - queued_voice_frames++; - } + qlen++; } - if ((queued_frames + new_frames) > 128) { - ast_log(LOG_WARNING, "Exceptionally long queue length queuing to %s\n", chan->name); - while ((f = AST_LIST_REMOVE_HEAD(&frames, frame_list))) { + /* Allow up to 96 voice frames outstanding, and up to 128 total frames */ + if (((fin->frametype == AST_FRAME_VOICE) && (qlen > 96)) || (qlen > 128)) { + if (fin->frametype != AST_FRAME_VOICE) { + ast_log(LOG_WARNING, "Exceptionally long queue length queuing to %s\n", chan->name); + ast_assert(fin->frametype == AST_FRAME_VOICE); + } else { + if (option_debug) + ast_log(LOG_DEBUG, "Dropping voice to exceptionally long queue on %s\n", chan->name); ast_frfree(f); + ast_channel_unlock(chan); + return 0; } - ast_channel_unlock(chan); - return 0; } - if ((queued_voice_frames + new_voice_frames) > 96) { - ast_log(LOG_WARNING, "Exceptionally long voice queue length queuing to %s\n", chan->name); - while ((f = AST_LIST_REMOVE_HEAD(&frames, frame_list))) { - ast_frfree(f); - } - ast_channel_unlock(chan); - return 0; - } - - if (after) { - AST_LIST_INSERT_LIST_AFTER(&chan->readq, &frames, after, frame_list); + if (head) { + AST_LIST_INSERT_HEAD(&chan->readq, f, frame_list); } else { - if (head) { - AST_LIST_APPEND_LIST(&frames, &chan->readq, frame_list); - AST_LIST_HEAD_INIT_NOLOCK(&chan->readq); - } - AST_LIST_APPEND_LIST(&chan->readq, &frames, frame_list); + AST_LIST_INSERT_TAIL(&chan->readq, f, frame_list); } if (chan->alertpipe[1] > -1) { - if (write(chan->alertpipe[1], &blah, new_frames * sizeof(blah)) != (new_frames * sizeof(blah))) { - ast_log(LOG_WARNING, "Unable to write to alert pipe on %s (qlen = %d): %s!\n", - chan->name, queued_frames, strerror(errno)); + if (write(chan->alertpipe[1], &blah, sizeof(blah)) != sizeof(blah)) { + ast_log(LOG_WARNING, "Unable to write to alert pipe on %s, frametype/subclass %d/%d (qlen = %d): %s!\n", + chan->name, f->frametype, f->subclass, qlen, strerror(errno)); } #ifdef HAVE_DAHDI } else if (chan->timingfd > -1) { - while (new_frames--) { - ioctl(chan->timingfd, DAHDI_TIMERPING, &blah); - } + ioctl(chan->timingfd, DAHDI_TIMERPING, &blah); #endif } else if (ast_test_flag(chan, AST_FLAG_BLOCKING)) { pthread_kill(chan->blocker, SIGURG); @@ -991,12 +961,12 @@ static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, in int ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin) { - return __ast_queue_frame(chan, fin, 0, NULL); + return __ast_queue_frame(chan, fin, 0); } int ast_queue_frame_head(struct ast_channel *chan, struct ast_frame *fin) { - return __ast_queue_frame(chan, fin, 1, NULL); + return __ast_queue_frame(chan, fin, 1); } /*! \brief Queue a hangup frame for channel */ @@ -2180,7 +2150,7 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) AST_LIST_REMOVE_CURRENT(&chan->readq, frame_list); break; } - AST_LIST_TRAVERSE_SAFE_END; + AST_LIST_TRAVERSE_SAFE_END if (!f) { /* There were no acceptable frames on the readq. */ @@ -2225,14 +2195,13 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) chan->fdno = -1; if (f) { - struct ast_frame *readq_tail = AST_LIST_LAST(&chan->readq); - /* if the channel driver returned more than one frame, stuff the excess - into the readq for the next ast_read call + into the readq for the next ast_read call (note that we can safely assume + that the readq is empty, because otherwise we would not have called into + the channel driver and f would be only a single frame) */ if (AST_LIST_NEXT(f, frame_list)) { - ast_queue_frame(chan, AST_LIST_NEXT(f, frame_list)); - ast_frfree(AST_LIST_NEXT(f, frame_list)); + AST_LIST_HEAD_SET_NOLOCK(&chan->readq, AST_LIST_NEXT(f, frame_list)); AST_LIST_NEXT(f, frame_list) = NULL; } @@ -2441,26 +2410,8 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) } } - if (chan->readtrans && (f = ast_translate(chan->readtrans, f, 1)) == NULL) { + if (chan->readtrans && (f = ast_translate(chan->readtrans, f, 1)) == NULL) f = &ast_null_frame; - } - - /* it is possible for the translation process on chan->readtrans to have - produced multiple frames from the single input frame we passed it; if - this happens, queue the additional frames *before* the frames we may - have queued earlier. if the readq was empty, put them at the head of - the queue, and if it was not, put them just after the frame that was - at the end of the queue. - */ - if (AST_LIST_NEXT(f, frame_list)) { - if (!readq_tail) { - ast_queue_frame_head(chan, AST_LIST_NEXT(f, frame_list)); - } else { - __ast_queue_frame(chan, AST_LIST_NEXT(f, frame_list), 0, readq_tail); - } - ast_frfree(AST_LIST_NEXT(f, frame_list)); - AST_LIST_NEXT(f, frame_list) = NULL; - } /* Run generator sitting on the line if timing device not available * and synchronous generation of outgoing frames is necessary */ @@ -2791,7 +2742,7 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) { int res = -1; int count = 0; - struct ast_frame *f = NULL; + struct ast_frame *f = NULL, *f2 = NULL; /*Deadlock avoidance*/ while(ast_channel_trylock(chan)) { @@ -2862,12 +2813,10 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) break; case AST_FRAME_DTMF_END: if (chan->audiohooks) { - struct ast_frame *new_frame = fr; - - new_frame = ast_audiohook_write_list(chan, chan->audiohooks, AST_AUDIOHOOK_DIRECTION_WRITE, fr); - if (new_frame != fr) { - ast_frfree(new_frame); - } + struct ast_frame *old_frame = fr; + fr = ast_audiohook_write_list(chan, chan->audiohooks, AST_AUDIOHOOK_DIRECTION_WRITE, fr); + if (old_frame != fr) + f = fr; } ast_clear_flag(chan, AST_FLAG_BLOCKING); ast_channel_unlock(chan); @@ -2896,6 +2845,13 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) if (chan->tech->write == NULL) break; /*! \todo XXX should return 0 maybe ? */ + if (chan->audiohooks) { + struct ast_frame *old_frame = fr; + fr = ast_audiohook_write_list(chan, chan->audiohooks, AST_AUDIOHOOK_DIRECTION_WRITE, fr); + if (old_frame != fr) + f2 = fr; + } + /* If the frame is in the raw write format, then it's easy... just use the frame - otherwise we will have to translate */ if (fr->subclass == chan->rawwriteformat) f = fr; @@ -2908,82 +2864,37 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) break; } - if (chan->audiohooks) { - struct ast_frame *new_frame, *cur; - - for (cur = f; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - new_frame = ast_audiohook_write_list(chan, chan->audiohooks, AST_AUDIOHOOK_DIRECTION_WRITE, cur); - if (new_frame != cur) { - ast_frfree(new_frame); - } - } - } - /* If Monitor is running on this channel, then we have to write frames out there too */ - /* the translator on chan->writetrans may have returned multiple frames - from the single frame we passed in; if so, feed each one of them to the - monitor */ if (chan->monitor && chan->monitor->write_stream) { - struct ast_frame *cur; - - for (cur = f; cur; cur = AST_LIST_NEXT(cur, frame_list)) { /* XXX must explain this code */ #ifndef MONITOR_CONSTANT_DELAY - int jump = chan->insmpl - chan->outsmpl - 4 * cur->samples; - if (jump >= 0) { - jump = chan->insmpl - chan->outsmpl; - if (ast_seekstream(chan->monitor->write_stream, jump, SEEK_FORCECUR) == -1) - ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n"); - chan->outsmpl += jump + cur->samples; - } else { - chan->outsmpl += cur->samples; - } + int jump = chan->insmpl - chan->outsmpl - 4 * f->samples; + if (jump >= 0) { + jump = chan->insmpl - chan->outsmpl; + if (ast_seekstream(chan->monitor->write_stream, jump, SEEK_FORCECUR) == -1) + ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n"); + chan->outsmpl += jump + f->samples; + } else + chan->outsmpl += f->samples; #else - int jump = chan->insmpl - chan->outsmpl; - if (jump - MONITOR_DELAY >= 0) { - if (ast_seekstream(chan->monitor->write_stream, jump - cur->samples, SEEK_FORCECUR) == -1) - ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n"); - chan->outsmpl += jump; - } else { - chan->outsmpl += cur->samples; - } + int jump = chan->insmpl - chan->outsmpl; + if (jump - MONITOR_DELAY >= 0) { + if (ast_seekstream(chan->monitor->write_stream, jump - f->samples, SEEK_FORCECUR) == -1) + ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n"); + chan->outsmpl += jump; + } else + chan->outsmpl += f->samples; #endif - if (chan->monitor->state == AST_MONITOR_RUNNING) { - if (ast_writestream(chan->monitor->write_stream, cur) < 0) - ast_log(LOG_WARNING, "Failed to write data to channel monitor write stream\n"); - } + if (chan->monitor->state == AST_MONITOR_RUNNING) { + if (ast_writestream(chan->monitor->write_stream, f) < 0) + ast_log(LOG_WARNING, "Failed to write data to channel monitor write stream\n"); } } - /* the translator on chan->writetrans may have returned multiple frames - from the single frame we passed in; if so, feed each one of them to the - channel, freeing each one after it has been written */ - if ((f != fr) && AST_LIST_NEXT(f, frame_list)) { - struct ast_frame *cur, *next; - unsigned int skip = 0; - - for (cur = f, next = AST_LIST_NEXT(cur, frame_list); - cur; - cur = next, next = cur ? AST_LIST_NEXT(cur, frame_list) : NULL) { - if (!skip) { - if ((res = chan->tech->write(chan, cur)) < 0) { - chan->_softhangup |= AST_SOFTHANGUP_DEV; - skip = 1; - } else if (next) { - /* don't do this for the last frame in the list, - as the code outside the loop will do it once - */ - chan->fout = FRAMECOUNT_INC(chan->fout); - } - } - ast_frfree(cur); - } - - /* reset f so the code below doesn't attempt to free it */ - f = NULL; - } else { - res = chan->tech->write(chan, f); - } + if (f) + res = chan->tech->write(chan,f); + else + res = 0; break; case AST_FRAME_NULL: case AST_FRAME_IAX: @@ -3000,12 +2911,13 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) if (f && f != fr) ast_frfree(f); + if (f2) + ast_frfree(f2); ast_clear_flag(chan, AST_FLAG_BLOCKING); - /* Consider a write failure to force a soft hangup */ - if (res < 0) { + if (res < 0) chan->_softhangup |= AST_SOFTHANGUP_DEV; - } else { + else { chan->fout = FRAMECOUNT_INC(chan->fout); } done: diff --git a/main/file.c b/main/file.c index 43a7030f7..faca5a9be 100644 --- a/main/file.c +++ b/main/file.c @@ -203,20 +203,14 @@ int ast_writestream(struct ast_filestream *fs, struct ast_frame *f) struct ast_frame *trf; fs->lastwriteformat = f->subclass; /* Get the translated frame but don't consume the original in case they're using it on another stream */ - if ((trf = ast_translate(fs->trans, f, 0))) { - struct ast_frame *cur; - - /* the translator may have returned multiple frames, so process them */ - for (cur = trf; cur; cur = AST_LIST_NEXT(cur, frame_list)) { - if ((res = fs->fmt->write(fs, trf))) { - ast_log(LOG_WARNING, "Translated frame write failed\n"); - break; - } - } + trf = ast_translate(fs->trans, f, 0); + if (trf) { + res = fs->fmt->write(fs, trf); ast_frfree(trf); - } else { + if (res) + ast_log(LOG_WARNING, "Translated frame write failed\n"); + } else res = 0; - } } } return res; diff --git a/main/frame.c b/main/frame.c index 253bc0536..58e0762eb 100644 --- a/main/frame.c +++ b/main/frame.c @@ -47,6 +47,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/dsp.h" #include "asterisk/file.h" +#ifdef TRACE_FRAMES +static int headers; +static AST_LIST_HEAD_STATIC(headerlist, ast_frame); +#endif + #if !defined(LOW_MEMORY) static void frame_cache_cleanup(void *data); @@ -286,7 +291,7 @@ struct ast_frame *ast_smoother_read(struct ast_smoother *s) memmove(s->data, s->data + len, s->len); if (!ast_tvzero(s->delivery)) { /* If we have delivery time, increment it, otherwise, leave it at 0 */ - s->delivery = ast_tvadd(s->delivery, ast_samp2tv(s->f.samples, ast_format_rate(s->format))); + s->delivery = ast_tvadd(s->delivery, ast_samp2tv(s->f.samples, 8000)); } } /* Return frame */ @@ -323,6 +328,12 @@ static struct ast_frame *ast_frame_header_new(void) #endif f->mallocd_hdr_len = sizeof(*f); +#ifdef TRACE_FRAMES + AST_LIST_LOCK(&headerlist); + headers++; + AST_LIST_INSERT_HEAD(&headerlist, f, frame_list); + AST_LIST_UNLOCK(&headerlist); +#endif return f; } @@ -340,7 +351,7 @@ static void frame_cache_cleanup(void *data) } #endif -static void __frame_free(struct ast_frame *fr, int cache) +void ast_frame_free(struct ast_frame *fr, int cache) { if (ast_test_flag(fr, AST_FRFLAG_FROM_TRANSLATOR)) { ast_translate_frame_freed(fr); @@ -359,8 +370,8 @@ static void __frame_free(struct ast_frame *fr, int cache) * to keep things simple... */ struct ast_frame_cache *frames; - if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames))) && - (frames->size < FRAME_CACHE_MAX_SIZE)) { + if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames))) + && frames->size < FRAME_CACHE_MAX_SIZE) { AST_LIST_INSERT_HEAD(&frames->list, fr, frame_list); frames->size++; return; @@ -374,25 +385,19 @@ static void __frame_free(struct ast_frame *fr, int cache) } if (fr->mallocd & AST_MALLOCD_SRC) { if (fr->src) - free((void *)fr->src); + free((char *)fr->src); } if (fr->mallocd & AST_MALLOCD_HDR) { +#ifdef TRACE_FRAMES + AST_LIST_LOCK(&headerlist); + headers--; + AST_LIST_REMOVE(&headerlist, fr, frame_list); + AST_LIST_UNLOCK(&headerlist); +#endif free(fr); } } - -void ast_frame_free(struct ast_frame *frame, int cache) -{ - struct ast_frame *next; - - for (next = AST_LIST_NEXT(frame, frame_list); - frame; - frame = next, next = frame ? AST_LIST_NEXT(frame, frame_list) : NULL) { - __frame_free(frame, cache); - } -} - /*! * \brief 'isolates' a frame by duplicating non-malloc'ed components * (header, src, data). @@ -403,29 +408,19 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr) struct ast_frame *out; void *newdata; - /* if none of the existing frame is malloc'd, let ast_frdup() do it - since it is more efficient - */ - if (fr->mallocd == 0) { - return ast_frdup(fr); - } - - /* if everything is already malloc'd, we are done */ - if ((fr->mallocd & (AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA)) == - (AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA)) { - return fr; - } + ast_clear_flag(fr, AST_FRFLAG_FROM_TRANSLATOR); + ast_clear_flag(fr, AST_FRFLAG_FROM_DSP); if (!(fr->mallocd & AST_MALLOCD_HDR)) { /* Allocate a new header if needed */ - if (!(out = ast_frame_header_new())) { + if (!(out = ast_frame_header_new())) return NULL; - } out->frametype = fr->frametype; out->subclass = fr->subclass; out->datalen = fr->datalen; out->samples = fr->samples; out->offset = fr->offset; + out->data = fr->data; /* Copy the timing data */ ast_copy_flags(out, fr, AST_FRFLAG_HAS_TIMING_INFO); if (ast_test_flag(fr, AST_FRFLAG_HAS_TIMING_INFO)) { @@ -433,34 +428,26 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr) out->len = fr->len; out->seqno = fr->seqno; } - } else { - ast_clear_flag(fr, AST_FRFLAG_FROM_TRANSLATOR); - ast_clear_flag(fr, AST_FRFLAG_FROM_DSP); - ast_clear_flag(fr, AST_FRFLAG_FROM_FILESTREAM); + } else out = fr; - } - if (!(fr->mallocd & AST_MALLOCD_SRC) && fr->src) { - if (!(out->src = ast_strdup(fr->src))) { - if (out != fr) { - free(out); + if (!(fr->mallocd & AST_MALLOCD_SRC)) { + if (fr->src) { + if (!(out->src = ast_strdup(fr->src))) { + if (out != fr) + free(out); + return NULL; } - return NULL; } - } else { + } else out->src = fr->src; - fr->src = NULL; - fr->mallocd &= ~AST_MALLOCD_SRC; - } if (!(fr->mallocd & AST_MALLOCD_DATA)) { if (!(newdata = ast_malloc(fr->datalen + AST_FRIENDLY_OFFSET))) { - if (out->src != fr->src) { + if (out->src != fr->src) free((void *) out->src); - } - if (out != fr) { + if (out != fr) free(out); - } return NULL; } newdata += AST_FRIENDLY_OFFSET; @@ -468,10 +455,6 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr) out->datalen = fr->datalen; memcpy(newdata, fr->data, fr->datalen); out->data = newdata; - } else { - out->data = fr->data; - fr->data = NULL; - fr->mallocd &= ~AST_MALLOCD_DATA; } out->mallocd = AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA; @@ -514,7 +497,7 @@ struct ast_frame *ast_frdup(const struct ast_frame *f) break; } } - AST_LIST_TRAVERSE_SAFE_END; + AST_LIST_TRAVERSE_SAFE_END } #endif @@ -987,6 +970,29 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix) } +#ifdef TRACE_FRAMES +static int show_frame_stats(int fd, int argc, char *argv[]) +{ + struct ast_frame *f; + int x=1; + if (argc != 4) + return RESULT_SHOWUSAGE; + AST_LIST_LOCK(&headerlist); + ast_cli(fd, " Framer Statistics \n"); + ast_cli(fd, "---------------------------\n"); + ast_cli(fd, "Total allocated headers: %d\n", headers); + ast_cli(fd, "Queue Dump:\n"); + AST_LIST_TRAVERSE(&headerlist, f, frame_list) + ast_cli(fd, "%d. Type %d, subclass %d from %s\n", x++, f->frametype, f->subclass, f->src ? f->src : "<Unknown>"); + AST_LIST_UNLOCK(&headerlist); + return RESULT_SUCCESS; +} + +static char frame_stats_usage[] = +"Usage: core show frame stats\n" +" Displays debugging statistics from framer\n"; +#endif + /* Builtin Asterisk CLI-commands for debugging */ static struct ast_cli_entry cli_show_codecs = { { "show", "codecs", NULL }, @@ -1013,6 +1019,13 @@ static struct ast_cli_entry cli_show_codec = { show_codec_n_deprecated, NULL, NULL }; +#ifdef TRACE_FRAMES +static struct ast_cli_entry cli_show_frame_stats = { + { "show", "frame", "stats", NULL }, + show_frame_stats, NULL, + NULL }; +#endif + static struct ast_cli_entry my_clis[] = { { { "core", "show", "codecs", NULL }, show_codecs, "Displays a list of codecs", @@ -1033,6 +1046,12 @@ static struct ast_cli_entry my_clis[] = { { { "core", "show", "codec", NULL }, show_codec_n, "Shows a specific codec", frame_show_codec_n_usage, NULL, &cli_show_codec }, + +#ifdef TRACE_FRAMES + { { "core", "show", "frame", "stats", NULL }, + show_frame_stats, "Shows frame statistics", + frame_stats_usage, NULL, &cli_show_frame_stats }, +#endif }; int init_framer(void) diff --git a/main/slinfactory.c b/main/slinfactory.c index b848fb074..212edef92 100644 --- a/main/slinfactory.c +++ b/main/slinfactory.c @@ -57,7 +57,7 @@ void ast_slinfactory_destroy(struct ast_slinfactory *sf) int ast_slinfactory_feed(struct ast_slinfactory *sf, struct ast_frame *f) { struct ast_frame *begin_frame = f, *duped_frame = NULL, *frame_ptr; - unsigned int x = 0; + unsigned int x; /* In some cases, we can be passed a frame which has no data in it, but * which has a positive number of samples defined. Once such situation is @@ -84,33 +84,27 @@ int ast_slinfactory_feed(struct ast_slinfactory *sf, struct ast_frame *f) } } - if (!(begin_frame = ast_translate(sf->trans, f, 0))) { + if (!(begin_frame = ast_translate(sf->trans, f, 0))) return 0; - } - if (!(duped_frame = ast_frisolate(begin_frame))) { - return 0; - } + duped_frame = ast_frdup(begin_frame); - if (duped_frame != begin_frame) { - ast_frfree(begin_frame); - } + ast_frfree(begin_frame); + + if (!duped_frame) + return 0; } else { if (!(duped_frame = ast_frdup(f))) return 0; } - AST_LIST_TRAVERSE(&sf->queue, frame_ptr, frame_list) { + x = 0; + AST_LIST_TRAVERSE(&sf->queue, frame_ptr, frame_list) x++; - } - /* if the frame was translated, the translator may have returned multiple - frames, so process each of them - */ - for (begin_frame = duped_frame; begin_frame; begin_frame = AST_LIST_NEXT(begin_frame, frame_list)) { - AST_LIST_INSERT_TAIL(&sf->queue, begin_frame, frame_list); - sf->size += begin_frame->samples; - } + AST_LIST_INSERT_TAIL(&sf->queue, duped_frame, frame_list); + + sf->size += duped_frame->samples; return x; } diff --git a/makeopts.in b/makeopts.in index f680cd76d..790ba6e86 100644 --- a/makeopts.in +++ b/makeopts.in @@ -43,8 +43,6 @@ GC_LDFLAGS=@GC_LDFLAGS@ PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ PTHREAD_LIBS=@PTHREAD_LIBS@ -GNU_LD=@GNU_LD@ - prefix = @prefix@ exec_prefix = @exec_prefix@ diff --git a/res/res_adsi.exports b/res/res_adsi.exports deleted file mode 100644 index a4119dc1f..000000000 --- a/res/res_adsi.exports +++ /dev/null @@ -1,33 +0,0 @@ -{ - global: - ast_adsi_available; - ast_adsi_begin_download; - ast_adsi_channel_restore; - ast_adsi_clear_screen; - ast_adsi_clear_soft_keys; - ast_adsi_connect_session; - ast_adsi_data_mode; - ast_adsi_disconnect_session; - ast_adsi_display; - ast_adsi_download_connect; - ast_adsi_download_disconnect; - ast_adsi_end_download; - ast_adsi_get_cpeid; - ast_adsi_get_cpeinfo; - ast_adsi_input_control; - ast_adsi_input_format; - ast_adsi_load_session; - ast_adsi_load_soft_key; - ast_adsi_print; - ast_adsi_query_cpeid; - ast_adsi_query_cpeinfo; - ast_adsi_read_encoded_dtmf; - ast_adsi_set_keys; - ast_adsi_set_line; - ast_adsi_transmit_message; - ast_adsi_transmit_message_full; - ast_adsi_unload_session; - ast_adsi_voice_mode; - local: - *; -}; diff --git a/res/res_agi.exports b/res/res_agi.exports deleted file mode 100644 index e1b11968f..000000000 --- a/res/res_agi.exports +++ /dev/null @@ -1,7 +0,0 @@ -{ - global: - ast_agi_register; - ast_agi_unregister; - local: - *; -}; diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index 5c3c1f669..7f11b5db3 100644 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -558,7 +558,7 @@ static int load_module (void) return 0; } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "ODBC Configuration", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "ODBC Configuration", .load = load_module, .unload = unload_module, ); diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 986223480..494497033 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -835,7 +835,7 @@ static int realtime_pgsql_status(int fd, int argc, char **argv) } /* needs usecount semantics defined */ -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL RealTime Configuration Driver", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "PostgreSQL RealTime Configuration Driver", .load = load_module, .unload = unload_module, .reload = reload diff --git a/res/res_crypto.c b/res/res_crypto.c index 8fd78c498..c2c33d015 100644 --- a/res/res_crypto.c +++ b/res/res_crypto.c @@ -624,7 +624,7 @@ static int unload_module(void) } /* needs usecount semantics defined */ -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Cryptographic Digital Signatures", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Cryptographic Digital Signatures", .load = load_module, .unload = unload_module, .reload = reload diff --git a/res/res_features.exports b/res/res_features.exports deleted file mode 100644 index 344a652c8..000000000 --- a/res/res_features.exports +++ /dev/null @@ -1,13 +0,0 @@ -{ - global: - ast_bridge_call; - ast_masq_park_call; - ast_park_call; - ast_parking_ext; - ast_pickup_call; - ast_pickup_ext; - ast_register_feature; - ast_unregister_feature; - local: - *; -}; diff --git a/res/res_indications.c b/res/res_indications.c index b1c948c95..9bff10b76 100644 --- a/res/res_indications.c +++ b/res/res_indications.c @@ -399,7 +399,7 @@ static int reload(void) return ind_load_module(); } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Indications Resource", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Indications Resource", .load = load_module, .unload = unload_module, .reload = reload, diff --git a/res/res_jabber.exports b/res/res_jabber.exports deleted file mode 100644 index 8df1fee0e..000000000 --- a/res/res_jabber.exports +++ /dev/null @@ -1,13 +0,0 @@ -{ - global: - ast_aji_create_chat; - ast_aji_disconnect; - ast_aji_get_client; - ast_aji_get_clients; - ast_aji_increment_mid; - ast_aji_invite_chat; - ast_aji_join_chat; - ast_aji_send; - local: - *; -}; diff --git a/res/res_monitor.exports b/res/res_monitor.exports deleted file mode 100644 index 4352dc8b6..000000000 --- a/res/res_monitor.exports +++ /dev/null @@ -1,11 +0,0 @@ -{ - global: - ast_monitor_change_fname; - ast_monitor_pause; - ast_monitor_setjoinfiles; - ast_monitor_start; - ast_monitor_stop; - ast_monitor_unpause; - local: - *; -}; diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index 95fe16ec2..cd8bb3e10 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -1486,7 +1486,7 @@ static int unload_module(void) return res; } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Music On Hold Resource", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Music On Hold Resource", .load = load_module, .unload = unload_module, .reload = reload, diff --git a/res/res_odbc.exports b/res/res_odbc.exports deleted file mode 100644 index 1e38d49da..000000000 --- a/res/res_odbc.exports +++ /dev/null @@ -1,11 +0,0 @@ -{ - global: - ast_odbc_backslash_is_escape; - ast_odbc_prepare_and_execute; - ast_odbc_release_obj; - ast_odbc_request_obj; - ast_odbc_sanity_check; - ast_odbc_smart_execute; - local: - *; -}; diff --git a/res/res_smdi.exports b/res/res_smdi.exports deleted file mode 100644 index 7fe3edff3..000000000 --- a/res/res_smdi.exports +++ /dev/null @@ -1,18 +0,0 @@ -{ - global: - ast_smdi_interface_find; - ast_smdi_interface_unref; - ast_smdi_md_message_destroy; - ast_smdi_md_message_pop; - ast_smdi_md_message_putback; - ast_smdi_md_message_wait; - ast_smdi_mwi_message_destroy; - ast_smdi_mwi_message_pop; - ast_smdi_mwi_message_putback; - ast_smdi_mwi_message_wait; - ast_smdi_mwi_message_wait_station; - ast_smdi_mwi_set; - ast_smdi_mwi_unset; - local: - *; -}; diff --git a/res/res_snmp.c b/res/res_snmp.c index 5ec0419ad..6bbf23171 100644 --- a/res/res_snmp.c +++ b/res/res_snmp.c @@ -109,7 +109,7 @@ static int unload_module(void) return ((thread != AST_PTHREADT_NULL) ? pthread_join(thread, NULL) : 0); } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SNMP [Sub]Agent for Asterisk", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "SNMP [Sub]Agent for Asterisk", .load = load_module, .unload = unload_module, ); diff --git a/res/res_speech.exports b/res/res_speech.exports deleted file mode 100644 index 226660735..000000000 --- a/res/res_speech.exports +++ /dev/null @@ -1,21 +0,0 @@ -{ - global: - ast_speech_change; - ast_speech_change_results_type; - ast_speech_change_state; - ast_speech_destroy; - ast_speech_dtmf; - ast_speech_grammar_activate; - ast_speech_grammar_deactivate; - ast_speech_grammar_load; - ast_speech_grammar_unload; - ast_speech_new; - ast_speech_register; - ast_speech_results_free; - ast_speech_results_get; - ast_speech_start; - ast_speech_unregister; - ast_speech_write; - local: - *; -}; |