Improve the build system to *properly* remove unnecessary symbols from the runtime global namespace. Along the way, change the prefixes on some internal-only API calls to use a common prefix.

With these changes, for a module to export symbols into the global namespace, it must have *both* the AST_MODFLAG_GLOBAL_SYMBOLS flag and a linker script that allows the linker to leave the symbols exposed in the module's .so file (see res_odbc.exports for an example).



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@182802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin P. Fleming
2009-03-18 01:28:42 +00:00
parent 62fbf19157
commit f1f417a9d8
33 changed files with 511 additions and 247 deletions

View File

@@ -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;
struct ast_frame *f, *cur;
ast_audiohook_lock(&csth->spy_audiohook);
if (csth->spy_audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING) {
@@ -186,14 +186,16 @@ static int spy_generate(struct ast_channel *chan, void *data, int len, int sampl
if (!f)
return 0;
if (ast_write(chan, f)) {
ast_frfree(f);
return -1;
}
for (cur = f; cur; cur = AST_LIST_NEXT(cur, frame_list)) {
if (ast_write(chan, cur)) {
ast_frfree(f);
return -1;
}
if (csth->fd) {
if (write(csth->fd, f->data, f->datalen) < 0) {
ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
if (csth->fd) {
if (write(csth->fd, cur->data, cur->datalen) < 0) {
ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
}
}
}

View File

@@ -2338,9 +2338,19 @@ 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) {
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);
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;
}
}
}
} else {
ast_mutex_unlock(&conf->listenlock);

View File

@@ -229,9 +229,14 @@ static void *mixmonitor_thread(void *obj)
}
}
/* Write out the frame */
if (fs)
ast_writestream(fs, fr);
/* 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);
}
}
} else {
ast_mutex_unlock(&mixmonitor->mixmonitor_ds->lock);
}