Version 0.3.0 from FTP
[asterisk/asterisk.git] / translate.c
index 64165fd..0c5b1dd 100755 (executable)
@@ -11,6 +11,7 @@
  * the GNU General Public License
  */
 
+#include <asterisk/lock.h>
 #include <asterisk/channel.h>
 #include <asterisk/channel_pvt.h>
 #include <asterisk/logger.h>
@@ -19,6 +20,7 @@
 #include <asterisk/frame.h>
 #include <asterisk/sched.h>
 #include <asterisk/cli.h>
+#include <asterisk/term.h>
 #include <sys/socket.h>
 #include <sys/time.h>
 #include <unistd.h>
@@ -37,7 +39,7 @@
 /* This could all be done more efficiently *IF* we chained packets together
    by default, but it would also complicate virtually every application. */
    
-static pthread_mutex_t list_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t list_lock = AST_MUTEX_INITIALIZER;
 static struct ast_translator *list = NULL;
 
 struct ast_translator_dir {
@@ -106,8 +108,10 @@ struct ast_trans_pvt *ast_translator_build_path(int dest, int source)
                                tmp->step = tr_matrix[source][dest].step;
                                tmp->state = tmp->step->new();
                                if (!tmp->state) {
+                                       ast_log(LOG_WARNING, "Failed to build translator step from %d to %d\n", source, dest);
                                        free(tmp);
                                        tmp = NULL;
+                                       return NULL;
                                }
                                /* Set the root, if it doesn't exist yet... */
                                if (!tmpr)
@@ -253,7 +257,7 @@ static int show_translation(int fd, int argc, char *argv[])
                return RESULT_SHOWUSAGE;
        ast_cli(fd, "                        Translation times between formats (in milliseconds)\n");
        ast_cli(fd, "                                 Destination Format\n");
-       pthread_mutex_lock(&list_lock);
+       ast_pthread_mutex_lock(&list_lock);
        for (x=0;x<SHOW_TRANS; x++) {
                if (x == 1) 
                        strcpy(line, "  Src  ");
@@ -270,7 +274,7 @@ static int show_translation(int fd, int argc, char *argv[])
                snprintf(line + strlen(line), sizeof(line) - strlen(line), "\n");
                ast_cli(fd, line);                      
        }
-       pthread_mutex_unlock(&list_lock);
+       ast_pthread_mutex_unlock(&list_lock);
        return RESULT_SUCCESS;
 }
 
@@ -286,6 +290,7 @@ static struct ast_cli_entry show_trans =
 
 int ast_register_translator(struct ast_translator *t)
 {
+       char tmp[80];
        t->srcfmt = powerof(t->srcfmt);
        t->dstfmt = powerof(t->dstfmt);
        if ((t->srcfmt >= MAX_FORMAT) || (t->dstfmt >= MAX_FORMAT)) {
@@ -294,8 +299,8 @@ int ast_register_translator(struct ast_translator *t)
        }
        calc_cost(t);
        if (option_verbose > 1)
-               ast_verbose(VERBOSE_PREFIX_2 "Registered translator '%s' from format %d to %d, cost %d\n", t->name, t->srcfmt, t->dstfmt, t->cost);
-       pthread_mutex_lock(&list_lock);
+               ast_verbose(VERBOSE_PREFIX_2 "Registered translator '%s' from format %d to %d, cost %d\n", term_color(tmp, t->name, COLOR_MAGENTA, COLOR_BLACK, sizeof(tmp)), t->srcfmt, t->dstfmt, t->cost);
+       ast_pthread_mutex_lock(&list_lock);
        if (!added_cli) {
                ast_cli_register(&show_trans);
                added_cli++;
@@ -303,14 +308,14 @@ int ast_register_translator(struct ast_translator *t)
        t->next = list;
        list = t;
        rebuild_matrix();
-       pthread_mutex_unlock(&list_lock);
+       ast_pthread_mutex_unlock(&list_lock);
        return 0;
 }
 
 int ast_unregister_translator(struct ast_translator *t)
 {
        struct ast_translator *u, *ul = NULL;
-       pthread_mutex_lock(&list_lock);
+       ast_pthread_mutex_lock(&list_lock);
        u = list;
        while(u) {
                if (u == t) {
@@ -324,7 +329,7 @@ int ast_unregister_translator(struct ast_translator *t)
                u = u->next;
        }
        rebuild_matrix();
-       pthread_mutex_unlock(&list_lock);
+       ast_pthread_mutex_unlock(&list_lock);
        return (u ? 0 : -1);
 }
 
@@ -336,7 +341,7 @@ int ast_translator_best_choice(int *dst, int *srcs)
        int bestdst=0;
        int cur = 1;
        int besttime=999999999;
-       pthread_mutex_lock(&list_lock);
+       ast_pthread_mutex_lock(&list_lock);
        for (y=0;y<MAX_FORMAT;y++) {
                if ((cur & *dst) && (cur & *srcs)) {
                        /* This is a common format to both.  Pick it if we don't have one already */
@@ -363,6 +368,6 @@ int ast_translator_best_choice(int *dst, int *srcs)
                *dst = bestdst;
                best = 0;
        }
-       pthread_mutex_unlock(&list_lock);
+       ast_pthread_mutex_unlock(&list_lock);
        return best;
 }