aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.rules9
-rw-r--r--apps/app_chanspy.c18
-rw-r--r--apps/app_meetme.c16
-rw-r--r--apps/app_mixmonitor.c11
-rw-r--r--build_tools/cflags-devmode.xml2
-rwxr-xr-xbuild_tools/strip_nonapi37
-rw-r--r--default.exports4
-rw-r--r--include/asterisk/astobj2.h12
-rw-r--r--include/asterisk/frame.h9
-rw-r--r--include/asterisk/linkedlists.h26
-rw-r--r--main/Makefile13
-rw-r--r--main/asterisk.exports28
-rw-r--r--main/astobj2.c6
-rw-r--r--main/autoservice.c17
-rw-r--r--main/channel.c228
-rw-r--r--main/file.c18
-rw-r--r--main/frame.c127
-rw-r--r--main/slinfactory.c30
-rw-r--r--makeopts.in2
-rw-r--r--res/res_adsi.exports33
-rw-r--r--res/res_agi.exports7
-rw-r--r--res/res_config_odbc.c2
-rw-r--r--res/res_config_pgsql.c2
-rw-r--r--res/res_crypto.c2
-rw-r--r--res/res_features.exports13
-rw-r--r--res/res_indications.c2
-rw-r--r--res/res_jabber.exports13
-rw-r--r--res/res_monitor.exports11
-rw-r--r--res/res_musiconhold.c2
-rw-r--r--res/res_odbc.exports11
-rw-r--r--res/res_smdi.exports18
-rw-r--r--res/res_snmp.c2
-rw-r--r--res/res_speech.exports21
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:
- *;
-};