[asterisk-commits] oej: branch oej/obproxy r164599 - in /team/oej/obproxy: ./ agi/ apps/ build_t...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Dec 16 03:58:04 CST 2008
Author: oej
Date: Tue Dec 16 03:58:00 2008
New Revision: 164599
URL: http://svn.digium.com/view/asterisk?view=rev&rev=164599
Log:
Resetting automerge, resolving conflict
Added:
team/oej/obproxy/channels/busy_tone.h
- copied unchanged from r164350, branches/1.4/channels/busy_tone.h
team/oej/obproxy/channels/ring_tone.h
- copied unchanged from r164350, branches/1.4/channels/ring_tone.h
team/oej/obproxy/pbx/ael/ael-test/ael-vtest25/
- copied from r164350, branches/1.4/pbx/ael/ael-test/ael-vtest25/
team/oej/obproxy/pbx/ael/ael-test/ael-vtest25/extensions.ael
- copied unchanged from r164350, branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
team/oej/obproxy/pbx/ael/ael-test/ref.ael-vtest25
- copied unchanged from r164350, branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
Removed:
team/oej/obproxy/acinclude.m4
team/oej/obproxy/redhat/
Modified:
team/oej/obproxy/ (props changed)
team/oej/obproxy/agi/Makefile
team/oej/obproxy/agi/eagi-sphinx-test.c
team/oej/obproxy/agi/eagi-test.c
team/oej/obproxy/apps/app_adsiprog.c
team/oej/obproxy/apps/app_chanspy.c
team/oej/obproxy/apps/app_directed_pickup.c
team/oej/obproxy/apps/app_festival.c
team/oej/obproxy/apps/app_meetme.c
team/oej/obproxy/apps/app_rpt.c
team/oej/obproxy/apps/app_sms.c
team/oej/obproxy/bootstrap.sh
team/oej/obproxy/build_tools/get_makeopts
team/oej/obproxy/build_tools/get_moduleinfo
team/oej/obproxy/channels/ (props changed)
team/oej/obproxy/channels/Makefile
team/oej/obproxy/channels/chan_agent.c
team/oej/obproxy/channels/chan_alsa.c
team/oej/obproxy/channels/chan_dahdi.c
team/oej/obproxy/channels/chan_gtalk.c
team/oej/obproxy/channels/chan_h323.c
team/oej/obproxy/channels/chan_iax2.c
team/oej/obproxy/channels/chan_local.c
team/oej/obproxy/channels/chan_misdn.c
team/oej/obproxy/channels/chan_oss.c
team/oej/obproxy/channels/chan_phone.c
team/oej/obproxy/channels/chan_sip.c
team/oej/obproxy/channels/chan_skinny.c
team/oej/obproxy/channels/chan_vpb.cc
team/oej/obproxy/channels/misdn/ (props changed)
team/oej/obproxy/channels/misdn/Makefile
team/oej/obproxy/channels/misdn/isdn_lib.c
team/oej/obproxy/channels/misdn/isdn_lib.h
team/oej/obproxy/channels/misdn/isdn_lib_intern.h
team/oej/obproxy/channels/misdn_config.c
team/oej/obproxy/configure
team/oej/obproxy/configure.ac
team/oej/obproxy/pbx/Makefile
team/oej/obproxy/pbx/ael/ (props changed)
team/oej/obproxy/pbx/ael/ael-test/ref.ael-test6
team/oej/obproxy/pbx/ael/ael.flex
team/oej/obproxy/pbx/ael/ael.tab.c
team/oej/obproxy/pbx/ael/ael.tab.h
team/oej/obproxy/pbx/ael/ael.y
team/oej/obproxy/pbx/ael/ael_lex.c
team/oej/obproxy/pbx/pbx_ael.c
team/oej/obproxy/pbx/pbx_config.c
team/oej/obproxy/pbx/pbx_dundi.c
team/oej/obproxy/pbx/pbx_spool.c
Propchange: team/oej/obproxy/
------------------------------------------------------------------------------
automerge = http://www.codename-pineapple.org/
Modified: team/oej/obproxy/agi/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/agi/Makefile?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/agi/Makefile (original)
+++ team/oej/obproxy/agi/Makefile Tue Dec 16 03:58:00 2008
@@ -39,7 +39,7 @@
clean:
rm -f *.so *.o look eagi-test eagi-sphinx-test
- rm -f .*.o.d .*.oo.d *.s *.i
+ rm -f .*.d *.s *.i
rm -f strcompat.c
ifneq ($(wildcard .*.d),)
Modified: team/oej/obproxy/agi/eagi-sphinx-test.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/agi/eagi-sphinx-test.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/agi/eagi-sphinx-test.c (original)
+++ team/oej/obproxy/agi/eagi-sphinx-test.c Tue Dec 16 03:58:00 2008
@@ -70,7 +70,9 @@
char *val;
/* Read environment */
for(;;) {
- fgets(buf, sizeof(buf), stdin);
+ if (!fgets(buf, sizeof(buf), stdin)) {
+ return -1;
+ }
if (feof(stdin))
return -1;
buf[strlen(buf) - 1] = '\0';
@@ -121,7 +123,9 @@
return NULL;
}
if (FD_ISSET(STDIN_FILENO, &fds)) {
- fgets(astresp, sizeof(astresp), stdin);
+ if (!fgets(astresp, sizeof(astresp), stdin)) {
+ return NULL;
+ }
if (feof(stdin)) {
fprintf(stderr, "Got hungup on apparently\n");
return NULL;
@@ -132,9 +136,10 @@
}
if (FD_ISSET(AUDIO_FILENO, &fds)) {
res = read(AUDIO_FILENO, audiobuf, sizeof(audiobuf));
- if (res > 0) {
- if (sphinx_sock > -1)
- write(sphinx_sock, audiobuf, res);
+ if ((res > 0) && (sphinx_sock > -1)) {
+ if (write(sphinx_sock, audiobuf, res) < 0) {
+ fprintf(stderr, "write() failed: %s\n", strerror(errno));
+ }
}
}
if ((sphinx_sock > -1) && FD_ISSET(sphinx_sock, &fds)) {
Modified: team/oej/obproxy/agi/eagi-test.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/agi/eagi-test.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/agi/eagi-test.c (original)
+++ team/oej/obproxy/agi/eagi-test.c Tue Dec 16 03:58:00 2008
@@ -24,7 +24,9 @@
char *val;
/* Read environment */
for(;;) {
- fgets(buf, sizeof(buf), stdin);
+ if (!fgets(buf, sizeof(buf), stdin)) {
+ return -1;
+ }
if (feof(stdin))
return -1;
buf[strlen(buf) - 1] = '\0';
@@ -68,7 +70,9 @@
return NULL;
}
if (FD_ISSET(STDIN_FILENO, &fds)) {
- fgets(astresp, sizeof(astresp), stdin);
+ if (!fgets(astresp, sizeof(astresp), stdin)) {
+ return NULL;
+ }
if (feof(stdin)) {
fprintf(stderr, "Got hungup on apparently\n");
return NULL;
Modified: team/oej/obproxy/apps/app_adsiprog.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_adsiprog.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_adsiprog.c (original)
+++ team/oej/obproxy/apps/app_adsiprog.c Tue Dec 16 03:58:00 2008
@@ -1364,7 +1364,9 @@
/* Create "main" as first subroutine */
getsubbyname(scr, "main", NULL, 0);
while(!feof(f)) {
- fgets(buf, sizeof(buf), f);
+ if (!fgets(buf, sizeof(buf), f)) {
+ continue;
+ }
if (!feof(f)) {
lineno++;
/* Trim off trailing return */
Modified: team/oej/obproxy/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_chanspy.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_chanspy.c (original)
+++ team/oej/obproxy/apps/app_chanspy.c Tue Dec 16 03:58:00 2008
@@ -38,6 +38,7 @@
#include <string.h>
#include <unistd.h>
#include <ctype.h>
+#include <errno.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -190,8 +191,11 @@
return -1;
}
- if (csth->fd)
- write(csth->fd, f->data, f->datalen);
+ if (csth->fd) {
+ if (write(csth->fd, f->data, f->datalen) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
+ }
ast_frfree(f);
@@ -555,7 +559,7 @@
int igrp = !mygroup;
char *groups[25];
int num_groups = 0;
- char *dup_group;
+ char dup_group[512];
int x;
char *s;
@@ -587,7 +591,7 @@
if (mygroup) {
if ((group = pbx_builtin_getvar_helper(peer, "SPYGROUP"))) {
- dup_group = ast_strdupa(group);
+ ast_copy_string(dup_group, group, sizeof(dup_group));
num_groups = ast_app_separate_args(dup_group, ':', groups,
sizeof(groups) / sizeof(groups[0]));
}
@@ -674,6 +678,8 @@
ast_channel_setoption(chan, AST_OPTION_TXGAIN, &zero_volume, sizeof(zero_volume), 0);
+ ast_mutex_lock(&chanspy_ds.lock);
+ ast_mutex_unlock(&chanspy_ds.lock);
ast_mutex_destroy(&chanspy_ds.lock);
return res;
Modified: team/oej/obproxy/apps/app_directed_pickup.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_directed_pickup.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_directed_pickup.c (original)
+++ team/oej/obproxy/apps/app_directed_pickup.c Tue Dec 16 03:58:00 2008
@@ -83,7 +83,7 @@
/* Helper function that determines whether a channel is capable of being picked up */
static int can_pickup(struct ast_channel *chan)
{
- if (!chan->pbx && (chan->_state == AST_STATE_RINGING || chan->_state == AST_STATE_RING))
+ if (!chan->pbx && (chan->_state == AST_STATE_RINGING || chan->_state == AST_STATE_RING || chan->_state == AST_STATE_DOWN))
return 1;
else
return 0;
Modified: team/oej/obproxy/apps/app_festival.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_festival.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_festival.c (original)
+++ team/oej/obproxy/apps/app_festival.c Tue Dec 16 03:58:00 2008
@@ -45,6 +45,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
+#include <errno.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -160,7 +161,9 @@
}
#endif
- write(fd,waveform,length);
+ if (write(fd,waveform,length) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
close(fd);
exit(0);
}
@@ -431,17 +434,25 @@
writecache=1;
strln=strlen((char *)data);
ast_log(LOG_DEBUG,"line length : %d\n",strln);
- write(fdesc,&strln,sizeof(int));
- write(fdesc,data,strln);
+ if (write(fdesc,&strln,sizeof(int)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
+ if (write(fdesc,data,strln) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
seekpos=lseek(fdesc,0,SEEK_CUR);
ast_log(LOG_DEBUG,"Seek position : %d\n",seekpos);
}
} else {
- read(fdesc,&strln,sizeof(int));
+ if (read(fdesc,&strln,sizeof(int)) != sizeof(int)) {
+ ast_log(LOG_WARNING, "read() failed: %s\n", strerror(errno));
+ }
ast_log(LOG_DEBUG,"Cache file exists, strln=%d, strlen=%d\n",strln,(int)strlen((char *)data));
if (strlen((char *)data)==strln) {
ast_log(LOG_DEBUG,"Size OK\n");
- read(fdesc,&bigstring,strln);
+ if (read(fdesc,&bigstring,strln) != strln) {
+ ast_log(LOG_WARNING, "read() failed: %s\n", strerror(errno));
+ }
bigstring[strln] = 0;
if (strcmp(bigstring,data)==0) {
readcache=1;
@@ -470,7 +481,9 @@
if (writecache==1) {
ast_log(LOG_DEBUG,"Writing result to cache...\n");
while ((strln=read(fd,buffer,16384))!=0) {
- write(fdesc,buffer,strln);
+ if (write(fdesc,buffer,strln) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
}
close(fd);
close(fdesc);
Modified: team/oej/obproxy/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_meetme.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_meetme.c (original)
+++ team/oej/obproxy/apps/app_meetme.c Tue Dec 16 03:58:00 2008
@@ -64,6 +64,7 @@
#include "asterisk/translate.h"
#include "asterisk/ulaw.h"
#include "asterisk/astobj.h"
+#include "asterisk/astobj2.h"
#include "asterisk/devicestate.h"
#include "asterisk/dial.h"
#include "asterisk/causes.h"
@@ -164,6 +165,8 @@
CONFFLAG_SLA_STATION = (1 << 26),
/*! This is a SLA trunk. (Only for use by the SLA applications.) */
CONFFLAG_SLA_TRUNK = (1 << 27),
+ /*! Do not write any audio to this channel until the state is up. */
+ CONFFLAG_NO_AUDIO_UNTIL_UP = (1 << 28),
};
enum {
@@ -316,6 +319,20 @@
#define MAX_CONFNUM 80
#define MAX_PIN 80
+enum announcetypes {
+ CONF_HASJOIN,
+ CONF_HASLEFT
+};
+
+struct announce_listitem {
+ AST_LIST_ENTRY(announce_listitem) entry;
+ char namerecloc[PATH_MAX]; /*!< Name Recorded file Location */
+ char language[MAX_LANGUAGE];
+ struct ast_channel *confchan;
+ int confusers;
+ enum announcetypes announcetype;
+};
+
/*! \brief The MeetMe Conference object */
struct ast_conference {
ast_mutex_t playlock; /*!< Conference specific lock (players) */
@@ -333,7 +350,7 @@
unsigned int isdynamic:1; /*!< Created on the fly? */
unsigned int locked:1; /*!< Is the conference locked? */
pthread_t recordthread; /*!< thread for recording */
- ast_mutex_t recordthreadlock; /*!< control threads trying to start recordthread */
+ ast_mutex_t recordthreadlock; /*!< control threads trying to start recordthread */
pthread_attr_t attr; /*!< thread attribute */
const char *recordingfilename; /*!< Filename to record the Conference into */
const char *recordingformat; /*!< Format to record the Conference in */
@@ -344,6 +361,13 @@
struct ast_trans_pvt *transpath[32];
AST_LIST_HEAD_NOLOCK(, ast_conf_user) userlist;
AST_LIST_ENTRY(ast_conference) list;
+ /* announce_thread related data */
+ pthread_t announcethread;
+ ast_mutex_t announcethreadlock;
+ unsigned int announcethread_stop:1;
+ ast_cond_t announcelist_addition;
+ AST_LIST_HEAD_NOLOCK(, announce_listitem) announcelist;
+ ast_mutex_t announcelistlock;
};
static AST_LIST_HEAD_STATIC(confs, ast_conference);
@@ -762,6 +786,8 @@
ast_mutex_init(&cnf->listenlock);
cnf->recordthread = AST_PTHREADT_NULL;
ast_mutex_init(&cnf->recordthreadlock);
+ cnf->announcethread = AST_PTHREADT_NULL;
+ ast_mutex_init(&cnf->announcethreadlock);
ast_copy_string(cnf->confno, confno, sizeof(cnf->confno));
ast_copy_string(cnf->pin, pin, sizeof(cnf->pin));
ast_copy_string(cnf->pinadmin, pinadmin, sizeof(cnf->pinadmin));
@@ -1233,6 +1259,7 @@
static int conf_free(struct ast_conference *conf)
{
int x;
+ struct announce_listitem *item;
AST_LIST_REMOVE(&confs, conf, list);
@@ -1254,6 +1281,20 @@
if (conf->transpath[x])
ast_translator_free_path(conf->transpath[x]);
}
+ if (conf->announcethread != AST_PTHREADT_NULL) {
+ ast_mutex_lock(&conf->announcelistlock);
+ conf->announcethread_stop = 1;
+ ast_softhangup(conf->chan, AST_SOFTHANGUP_EXPLICIT);
+ ast_cond_signal(&conf->announcelist_addition);
+ ast_mutex_unlock(&conf->announcelistlock);
+ pthread_join(conf->announcethread, NULL);
+
+ while ((item = AST_LIST_REMOVE_HEAD(&conf->announcelist, entry))) {
+ ast_filedelete(item->namerecloc, NULL);
+ ao2_ref(item, -1);
+ }
+ ast_mutex_destroy(&conf->announcelistlock);
+ }
if (conf->origframe)
ast_frfree(conf->origframe);
if (conf->lchan)
@@ -1266,6 +1307,8 @@
ast_mutex_destroy(&conf->playlock);
ast_mutex_destroy(&conf->listenlock);
ast_mutex_destroy(&conf->recordthreadlock);
+ ast_mutex_destroy(&conf->announcethreadlock);
+
free(conf);
return 0;
@@ -1288,6 +1331,10 @@
struct sla_trunk_ref *trunk_ref, struct sla_station *station, int lock)
{
struct sla_event *event;
+
+ if (sla.thread == AST_PTHREADT_NULL) {
+ return;
+ }
if (!(event = ast_calloc(1, sizeof(*event))))
return;
@@ -1370,6 +1417,81 @@
return res;
}
+static const char *get_announce_filename(enum announcetypes type)
+{
+ switch (type) {
+ case CONF_HASLEFT:
+ return "conf-hasleft";
+ break;
+ case CONF_HASJOIN:
+ return "conf-hasjoin";
+ break;
+ default:
+ return "";
+ }
+}
+
+static void *announce_thread(void *data)
+{
+ struct announce_listitem *current;
+ struct ast_conference *conf = data;
+ int res;
+ char filename[PATH_MAX] = "";
+ AST_LIST_HEAD_NOLOCK(, announce_listitem) local_list;
+ AST_LIST_HEAD_INIT_NOLOCK(&local_list);
+
+ while (!conf->announcethread_stop) {
+ ast_mutex_lock(&conf->announcelistlock);
+ if (conf->announcethread_stop) {
+ ast_mutex_unlock(&conf->announcelistlock);
+ break;
+ }
+ if (AST_LIST_EMPTY(&conf->announcelist))
+ ast_cond_wait(&conf->announcelist_addition, &conf->announcelistlock);
+
+ AST_LIST_APPEND_LIST(&local_list, &conf->announcelist, entry);
+ AST_LIST_HEAD_INIT_NOLOCK(&conf->announcelist);
+
+ ast_mutex_unlock(&conf->announcelistlock);
+ if (conf->announcethread_stop) {
+ break;
+ }
+
+ for (res = 1; !conf->announcethread_stop && (current = AST_LIST_REMOVE_HEAD(&local_list, entry)); ao2_ref(current, -1)) {
+ ast_log(LOG_DEBUG, "About to play %s\n", current->namerecloc);
+ if (!ast_fileexists(current->namerecloc, NULL, NULL))
+ continue;
+ if ((current->confchan) && (current->confusers > 1) && !ast_check_hangup(current->confchan)) {
+ if (!ast_streamfile(current->confchan, current->namerecloc, current->language))
+ res = ast_waitstream(current->confchan, "");
+ if (!res) {
+ ast_copy_string(filename, get_announce_filename(current->announcetype), sizeof(filename));
+ if (!ast_streamfile(current->confchan, filename, current->language))
+ ast_waitstream(current->confchan, "");
+ }
+ }
+ if (current->announcetype == CONF_HASLEFT) {
+ ast_filedelete(current->namerecloc, NULL);
+ }
+ }
+ }
+
+ /* thread marked to stop, clean up */
+ while ((current = AST_LIST_REMOVE_HEAD(&local_list, entry))) {
+ ast_filedelete(current->namerecloc, NULL);
+ ao2_ref(current, -1);
+ }
+ return NULL;
+}
+
+static int can_write(struct ast_channel *chan, int confflags)
+{
+ if (!(confflags & CONFFLAG_NO_AUDIO_UNTIL_UP)) {
+ return 1;
+ }
+
+ return (chan->_state == AST_STATE_UP);
+}
static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags, char *optargs[])
{
@@ -1462,6 +1584,14 @@
}
ast_mutex_unlock(&conf->recordthreadlock);
+ ast_mutex_lock(&conf->announcethreadlock);
+ if ((conf->announcethread == AST_PTHREADT_NULL) && !(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
+ ast_mutex_init(&conf->announcelistlock);
+ AST_LIST_HEAD_INIT_NOLOCK(&conf->announcelist);
+ ast_pthread_create_background(&conf->announcethread, NULL, announce_thread, conf);
+ }
+ ast_mutex_unlock(&conf->announcethreadlock);
+
time(&user->jointime);
if (conf->locked && (!(confflags & CONFFLAG_ADMIN))) {
@@ -1581,7 +1711,10 @@
}
}
- ast_indicate(chan, -1);
+ if (!(confflags & CONFFLAG_NO_AUDIO_UNTIL_UP)) {
+ /* We're leaving this alone until the state gets changed to up */
+ ast_indicate(chan, -1);
+ }
if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_WARNING, "Unable to set '%s' to write linear mode\n", chan->name);
@@ -1666,15 +1799,25 @@
ztc.chan = 0;
ztc.confno = conf->zapconf;
- ast_mutex_lock(&conf->playlock);
-
if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW)) && conf->users > 1) {
- if (conf->chan && ast_fileexists(user->namerecloc, NULL, NULL)) {
- if (!ast_streamfile(conf->chan, user->namerecloc, chan->language))
- ast_waitstream(conf->chan, "");
- if (!ast_streamfile(conf->chan, "conf-hasjoin", chan->language))
- ast_waitstream(conf->chan, "");
- }
+ struct announce_listitem *item;
+ if (!(item = ao2_alloc(sizeof(*item), NULL)))
+ return -1;
+ ast_copy_string(item->namerecloc, user->namerecloc, sizeof(item->namerecloc));
+ ast_copy_string(item->language, chan->language, sizeof(item->language));
+ item->confchan = conf->chan;
+ item->confusers = conf->users;
+ item->announcetype = CONF_HASJOIN;
+ ast_mutex_lock(&conf->announcelistlock);
+ ao2_ref(item, +1); /* add one more so we can determine when announce_thread is done playing it */
+ AST_LIST_INSERT_TAIL(&conf->announcelist, item, entry);
+ ast_cond_signal(&conf->announcelist_addition);
+ ast_mutex_unlock(&conf->announcelistlock);
+
+ while (!ast_check_hangup(conf->chan) && ao2_ref(item, 0) == 2 && !ast_safe_sleep(chan, 1000)) {
+ ;
+ }
+ ao2_ref(item, -1);
}
if (confflags & CONFFLAG_WAITMARKED && !conf->markedusers)
@@ -1689,7 +1832,6 @@
if (ioctl(fd, DAHDI_SETCONF, &ztc)) {
ast_log(LOG_WARNING, "Error setting conference\n");
close(fd);
- ast_mutex_unlock(&conf->playlock);
goto outrun;
}
ast_log(LOG_DEBUG, "Placed channel %s in %s conf %d\n", chan->name, dahdi_chan_name, conf->zapconf);
@@ -1710,8 +1852,6 @@
if (!(confflags & CONFFLAG_WAITMARKED) || ((confflags & CONFFLAG_MARKEDUSER) && (conf->markedusers >= 1)))
conf_play(chan, conf, ENTER);
}
-
- ast_mutex_unlock(&conf->playlock);
conf_flush(fd, chan);
@@ -2220,7 +2360,7 @@
}
if (conf->transframe[index]) {
if (conf->transframe[index]->frametype != AST_FRAME_NULL) {
- if (ast_write(chan, conf->transframe[index]))
+ 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 {
@@ -2232,7 +2372,7 @@
bailoutandtrynormal:
if (user->listen.actual)
ast_frame_adjust_volume(&fr, user->listen.actual);
- if (ast_write(chan, &fr) < 0) {
+ if (can_write(chan, confflags) && ast_write(chan, &fr) < 0) {
ast_log(LOG_WARNING, "Unable to write frame to channel %s\n", chan->name);
}
}
@@ -2260,22 +2400,26 @@
reset_volumes(user);
- AST_LIST_LOCK(&confs);
if (!(confflags & CONFFLAG_QUIET) && !(confflags & CONFFLAG_MONITOR) && !(confflags & CONFFLAG_ADMIN))
conf_play(chan, conf, LEAVE);
- if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
- if (ast_fileexists(user->namerecloc, NULL, NULL)) {
- if ((conf->chan) && (conf->users > 1)) {
- if (!ast_streamfile(conf->chan, user->namerecloc, chan->language))
- ast_waitstream(conf->chan, "");
- if (!ast_streamfile(conf->chan, "conf-hasleft", chan->language))
- ast_waitstream(conf->chan, "");
- }
- ast_filedelete(user->namerecloc, NULL);
- }
- }
- AST_LIST_UNLOCK(&confs);
+ if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW)) && conf->users > 1) {
+ struct announce_listitem *item;
+ if (!(item = ao2_alloc(sizeof(*item), NULL)))
+ return -1;
+ ast_copy_string(item->namerecloc, user->namerecloc, sizeof(item->namerecloc));
+ ast_copy_string(item->language, chan->language, sizeof(item->language));
+ item->confchan = conf->chan;
+ item->confusers = conf->users;
+ item->announcetype = CONF_HASLEFT;
+ ast_mutex_lock(&conf->announcelistlock);
+ AST_LIST_INSERT_TAIL(&conf->announcelist, item, entry);
+ ast_cond_signal(&conf->announcelist_addition);
+ ast_mutex_unlock(&conf->announcelistlock);
+ } else if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW)) && conf->users == 1) {
+ /* Last person is leaving, so no reason to try and announce, but should delete the name recording */
+ ast_filedelete(user->namerecloc, NULL);
+ }
outrun:
AST_LIST_LOCK(&confs);
@@ -2581,7 +2725,7 @@
if (args.options) {
ast_app_parse_options(meetme_opts, &confflags, optargs, args.options);
dynamic = ast_test_flag(&confflags, CONFFLAG_DYNAMIC | CONFFLAG_DYNAMICPIN);
- if (ast_test_flag(&confflags, CONFFLAG_DYNAMICPIN) && !args.pin)
+ if (ast_test_flag(&confflags, CONFFLAG_DYNAMICPIN) && ast_strlen_zero(args.pin))
strcpy(the_pin, "q");
empty = ast_test_flag(&confflags, CONFFLAG_EMPTY | CONFFLAG_EMPTYNOPIN);
@@ -3265,6 +3409,12 @@
ast_cond_t *cond;
};
+static void answer_trunk_chan(struct ast_channel *chan)
+{
+ ast_answer(chan);
+ ast_indicate(chan, -1);
+}
+
static void *run_station(void *data)
{
struct sla_station *station;
@@ -3287,7 +3437,7 @@
snprintf(conf_name, sizeof(conf_name), "SLA_%s", trunk_ref->trunk->name);
ast_set_flag(&conf_flags,
CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_PASS_DTMF | CONFFLAG_SLA_STATION);
- ast_answer(trunk_ref->chan);
+ answer_trunk_chan(trunk_ref->chan);
conf = build_conf(conf_name, "", "", 0, 0, 1);
if (conf) {
conf_run(trunk_ref->chan, conf, conf_flags.flags, NULL);
@@ -3460,7 +3610,7 @@
/* Track the channel that answered this trunk */
s_trunk_ref->chan = ast_dial_answered(ringing_station->station->dial);
/* Actually answer the trunk */
- ast_answer(ringing_trunk->trunk->chan);
+ answer_trunk_chan(ringing_trunk->trunk->chan);
sla_change_trunk_state(ringing_trunk->trunk, SLA_TRUNK_STATE_UP, ALL_TRUNK_REFS, NULL);
/* Now, start a thread that will connect this station to the trunk. The rest of
* the code here sets up the thread and ensures that it is able to save the arguments
@@ -4218,7 +4368,7 @@
ast_mutex_unlock(&sla.lock);
if (ringing_trunk) {
- ast_answer(ringing_trunk->trunk->chan);
+ answer_trunk_chan(ringing_trunk->trunk->chan);
sla_change_trunk_state(ringing_trunk->trunk, SLA_TRUNK_STATE_UP, ALL_TRUNK_REFS, NULL);
free(ringing_trunk);
@@ -4369,7 +4519,7 @@
return 0;
}
ast_set_flag(&conf_flags,
- CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_MARKEDUSER | CONFFLAG_PASS_DTMF);
+ CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_MARKEDUSER | CONFFLAG_PASS_DTMF | CONFFLAG_NO_AUDIO_UNTIL_UP);
ast_indicate(chan, AST_CONTROL_RINGING);
conf_run(chan, conf, conf_flags.flags, NULL);
dispose_conf(conf);
Modified: team/oej/obproxy/apps/app_rpt.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_rpt.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_rpt.c (original)
+++ team/oej/obproxy/apps/app_rpt.c Tue Dec 16 03:58:00 2008
@@ -273,7 +273,9 @@
#include <sys/time.h>
#include <sys/file.h>
#include <sys/ioctl.h>
+#ifdef HAVE_SYS_IO_H
#include <sys/io.h>
+#endif
#include <sys/vfs.h>
#include <math.h>
#include <netinet/in.h>
@@ -2901,7 +2903,7 @@
static void *rpt_tele_thread(void *this)
{
-DAHDI_CONFINFO ci; /* conference info */
+struct dahdi_confinfo ci; /* conference info */
int res = 0,haslink,hastx,hasremote,imdone = 0, unkeys_queued, x;
struct rpt_tele *mytele = (struct rpt_tele *)this;
struct rpt_tele *tlist;
@@ -3362,6 +3364,7 @@
{
res = set_ic706(myrpt);
}
+#ifdef HAVE_IOPERM
else if(!strcmp(myrpt->remote, remote_rig_rbi))
{
if (ioperm(myrpt->p.iobase,1,1) == -1)
@@ -3372,6 +3375,7 @@
}
else res = setrbi(myrpt);
}
+#endif
else if(!strcmp(myrpt->remote, remote_rig_kenwood))
{
res = setkenwood(myrpt);
@@ -4157,7 +4161,7 @@
static void *rpt_call(void *this)
{
-DAHDI_CONFINFO ci; /* conference info */
+struct dahdi_confinfo ci; /* conference info */
struct rpt *myrpt = (struct rpt *)this;
int res;
int stopped,congstarted,dialtimer,lastcidx,aborted;
@@ -4467,7 +4471,7 @@
struct rpt_link *l;
int reconnects = 0;
int i,n;
- DAHDI_CONFINFO ci; /* conference info */
+ struct dahdi_confinfo ci; /* conference info */
val = node_lookup(myrpt,node);
if (!val){
@@ -8759,7 +8763,7 @@
int ms = MSWAIT,i,lasttx=0,val,remrx=0,identqueued,othertelemqueued;
int tailmessagequeued,ctqueued,dtmfed;
struct ast_channel *who;
-DAHDI_CONFINFO ci; /* conference info */
+struct dahdi_confinfo ci; /* conference info */
time_t t;
struct rpt_link *l,*m;
struct rpt_tele *telem;
@@ -10564,8 +10568,8 @@
struct ast_channel *who;
struct ast_channel *cs[20];
struct rpt_link *l;
- DAHDI_CONFINFO ci; /* conference info */
- DAHDI_PARAMS par;
+ struct dahdi_confinfo ci; /* conference info */
+ struct dahdi_params par;
int ms,elap,nullfd;
time_t t,last_timeout_warning;
struct dahdi_radio_param z;
@@ -10987,6 +10991,7 @@
}
rpt_mutex_lock(&myrpt->lock);
}
+#ifdef HAVE_IOPERM
if ((!strcmp(myrpt->remote, remote_rig_rbi)) &&
(ioperm(myrpt->p.iobase,1,1) == -1))
{
@@ -10994,6 +10999,7 @@
ast_log(LOG_WARNING, "Cant get io permission on IO port %x hex\n",myrpt->p.iobase);
return -1;
}
+#endif
myrpt->remoteon = 1;
#ifdef OLD_ASTERISK
LOCAL_USER_ADD(u);
Modified: team/oej/obproxy/apps/app_sms.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/apps/app_sms.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/apps/app_sms.c (original)
+++ team/oej/obproxy/apps/app_sms.c Tue Dec 16 03:58:00 2008
@@ -662,7 +662,9 @@
*p++ = h->ud[n];
*p++ = '\n';
*p = 0;
- write (o, line, strlen (line));
+ if (write (o, line, strlen (line)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
close (o);
}
*h->oa = *h->da = h->udl = 0;
Modified: team/oej/obproxy/bootstrap.sh
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/bootstrap.sh?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/bootstrap.sh (original)
+++ team/oej/obproxy/bootstrap.sh Tue Dec 16 03:58:00 2008
@@ -32,7 +32,7 @@
echo "Generating the configure script ..."
-aclocal${MY_AM_VER} 2>/dev/null
+aclocal${MY_AM_VER} -I autoconf
autoconf${MY_AC_VER}
autoheader${MY_AC_VER}
automake${MY_AM_VER} --add-missing --copy 2>/dev/null
Modified: team/oej/obproxy/build_tools/get_makeopts
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/build_tools/get_makeopts?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/build_tools/get_makeopts (original)
+++ team/oej/obproxy/build_tools/get_makeopts Tue Dec 16 03:58:00 2008
@@ -1,3 +1,3 @@
/\/\*\*\* MAKEOPTS/ {printit=1; next}
/\*\*\*\// {if (printit) exit}
-// {if (printit) print}
+/.*/ {if (printit) print}
Modified: team/oej/obproxy/build_tools/get_moduleinfo
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/build_tools/get_moduleinfo?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/build_tools/get_moduleinfo (original)
+++ team/oej/obproxy/build_tools/get_moduleinfo Tue Dec 16 03:58:00 2008
@@ -1,3 +1,3 @@
/\/\*\*\* MODULEINFO/ {printit=1; next}
/\*\*\*\// {if (printit) exit}
-// {if (printit) print}
+/.*/ {if (printit) print}
Propchange: team/oej/obproxy/channels/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Dec 16 03:58:00 2008
@@ -1,12 +1,11 @@
*.a
*.d
*.i
+*.ii
*.oo
*.makeopts
*.moduleinfo
*.s
*.so
-busy.h
gentone
modules.link
-ringtone.h
Modified: team/oej/obproxy/channels/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/channels/Makefile?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/channels/Makefile (original)
+++ team/oej/obproxy/channels/Makefile Tue Dec 16 03:58:00 2008
@@ -66,7 +66,7 @@
include $(ASTTOPDIR)/Makefile.moddir_rules
clean::
- rm -f busy.h ringtone.h gentone
+ rm -f gentone
$(MAKE) -C misdn clean
ifneq ($(wildcard h323/Makefile.ast),)
@@ -94,17 +94,13 @@
$(CMD_PREFIX) $(HOST_CC) $(STATIC_BUILD) -o $@ $(HOST_CFLAGS) $(HOST_LDFLAGS) $^ $(LIBS)
gentone: LIBS+=-lm
-busy.h: gentone
- ./gentone busy 480 620
+busy_tone.h:
+ ./gentone busy_tone 480 620
-ringtone.h: gentone
- ./gentone ringtone 440 480
-
-chan_oss.o: busy.h ringtone.h
+ring_tone.h:
+ ./gentone ring_tone 440 480
$(if $(filter chan_iax2,$(EMBEDDED_MODS)),modules.link,chan_iax2.so): iax2-parser.o iax2-provision.o
-
-chan_alsa.o: busy.h ringtone.h
ifeq ($(OSARCH),linux-gnu)
chan_h323.so: chan_h323.o h323/libchanh323.a h323/Makefile.ast
Modified: team/oej/obproxy/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/channels/chan_agent.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/channels/chan_agent.c (original)
+++ team/oej/obproxy/channels/chan_agent.c Tue Dec 16 03:58:00 2008
@@ -666,9 +666,15 @@
struct agent_pvt *p = ast->tech_pvt;
int res = -1;
ast_mutex_lock(&p->lock);
- if (p->chan)
- res = p->chan->tech->indicate ? p->chan->tech->indicate(p->chan, condition, data, datalen) : -1;
- else
+ if (p->chan && !ast_check_hangup(p->chan)) {
+ while (ast_channel_trylock(p->chan)) {
+ ast_channel_unlock(ast);
+ usleep(1);
+ ast_channel_lock(ast);
+ }
+ res = p->chan->tech->indicate ? p->chan->tech->indicate(p->chan, condition, data, datalen) : -1;
+ ast_channel_unlock(p->chan);
+ } else
res = 0;
ast_mutex_unlock(&p->lock);
return res;
@@ -729,7 +735,8 @@
ast_mutex_unlock(&p->lock);
return res;
}
- ast_verbose( VERBOSE_PREFIX_3 "agent_call, call to agent '%s' call on '%s'\n", p->agent, p->chan->name);
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "agent_call, call to agent '%s' call on '%s'\n", p->agent, p->chan->name);
if (option_debug > 2)
ast_log(LOG_DEBUG, "Playing beep, lang '%s'\n", p->chan->language);
res = ast_streamfile(p->chan, beep, p->chan->language);
@@ -1029,7 +1036,7 @@
}
#endif
if (p->pending)
- tmp = ast_channel_alloc(0, state, 0, 0, "", p->chan ? p->chan->exten:"", p->chan ? p->chan->context:"", 0, "Agent/P%s-%d", p->agent, ast_random() & 0xffff);
+ tmp = ast_channel_alloc(0, state, 0, 0, "", p->chan ? p->chan->exten:"", p->chan ? p->chan->context:"", 0, "Agent/P%s-%d", p->agent, (int) ast_random() & 0xffff);
else
tmp = ast_channel_alloc(0, state, 0, 0, "", p->chan ? p->chan->exten:"", p->chan ? p->chan->context:"", 0, "Agent/%s", p->agent);
if (!tmp) {
@@ -2044,6 +2051,8 @@
tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTACKCALL");
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Saw variable AGENTACKCALL=%s, setting ackcall to: %d for Agent '%s'.\n",tmpoptions,p->ackcall,p->agent);
+ } else {
+ p->ackcall = ackcall;
}
if (pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF") && strlen(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"))) {
p->autologoff = atoi(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"));
@@ -2052,6 +2061,8 @@
tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF");
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Saw variable AGENTAUTOLOGOFF=%s, setting autologff to: %d for Agent '%s'.\n",tmpoptions,p->autologoff,p->agent);
+ } else {
+ p->autologoff = autologoff;
}
if (pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME") && strlen(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"))) {
p->wrapuptime = atoi(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"));
@@ -2060,6 +2071,8 @@
tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME");
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Saw variable AGENTWRAPUPTIME=%s, setting wrapuptime to: %d for Agent '%s'.\n",tmpoptions,p->wrapuptime,p->agent);
+ } else {
+ p->wrapuptime = wrapuptime;
}
ast_channel_unlock(chan);
unlock_channel = 0;
@@ -2447,7 +2460,9 @@
p->wrapuptime = 0;
}
- if (ast_true(ackcall_s))
+ if (!strcasecmp(ackcall_s, "always"))
+ p->ackcall = 2;
+ else if (ast_true(ackcall_s))
p->ackcall = 1;
else
p->ackcall = 0;
Modified: team/oej/obproxy/channels/chan_alsa.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/channels/chan_alsa.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/channels/chan_alsa.c (original)
+++ team/oej/obproxy/channels/chan_alsa.c Tue Dec 16 03:58:00 2008
@@ -63,8 +63,8 @@
#include "asterisk/abstract_jb.h"
#include "asterisk/musiconhold.h"
-#include "busy.h"
-#include "ringtone.h"
+#include "busy_tone.h"
+#include "ring_tone.h"
#include "ring10.h"
#include "answer.h"
@@ -327,7 +327,9 @@
}
#endif
if (FD_ISSET(sndcmd[0], &rfds)) {
- read(sndcmd[0], &cursound, sizeof(cursound));
+ if (read(sndcmd[0], &cursound, sizeof(cursound)) < 0) {
+ ast_log(LOG_WARNING, "read() failed: %s\n", strerror(errno));
+ }
silencelen = 0;
offset = 0;
sampsent = 0;
@@ -532,7 +534,9 @@
ast_queue_frame(alsa.owner, &f);
ast_mutex_unlock(&alsa.owner->lock);
}
- write(sndcmd[1], &res, sizeof(res));
+ if (write(sndcmd[1], &res, sizeof(res)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
}
snd_pcm_prepare(alsa.icard);
snd_pcm_start(alsa.icard);
@@ -543,10 +547,12 @@
static void answer_sound(void)
{
int res;
+
nosound = 1;
res = 4;
- write(sndcmd[1], &res, sizeof(res));
-
+ if (write(sndcmd[1], &res, sizeof(res)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
}
static int alsa_answer(struct ast_channel *c)
@@ -576,7 +582,9 @@
if (!autoanswer) {
/* Congestion noise */
res = 2;
- write(sndcmd[1], &res, sizeof(res));
+ if (write(sndcmd[1], &res, sizeof(res)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
}
}
snd_pcm_drop(alsa.icard);
@@ -770,8 +778,11 @@
res = -1;
}
- if (res > -1)
- write(sndcmd[1], &res, sizeof(res));
+ if (res > -1) {
+ if (write(sndcmd[1], &res, sizeof(res)) < 0) {
+ ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno));
+ }
+ }
ast_mutex_unlock(&alsalock);
Modified: team/oej/obproxy/channels/chan_dahdi.c
URL: http://svn.digium.com/view/asterisk/team/oej/obproxy/channels/chan_dahdi.c?view=diff&rev=164599&r1=164598&r2=164599
==============================================================================
--- team/oej/obproxy/channels/chan_dahdi.c (original)
+++ team/oej/obproxy/channels/chan_dahdi.c Tue Dec 16 03:58:00 2008
@@ -240,6 +240,11 @@
/*! \brief This is the thread for the monitor which checks for input on the channels
which are not currently in use. */
static pthread_t monitor_thread = AST_PTHREADT_NULL;
+static ast_cond_t ss_thread_complete;
+AST_MUTEX_DEFINE_STATIC(ss_thread_lock);
+AST_MUTEX_DEFINE_STATIC(restart_lock);
+static int ss_thread_count = 0;
+static int num_restart_pending = 0;
static int restart_monitor(void);
@@ -419,6 +424,8 @@
struct dahdi_pvt *master; /*!< Master to us (we follow their conferencing) */
int inconference; /*!< If our real should be in the conference */
+ int buf_no; /*!< Number of buffers */
+ int buf_policy; /*!< Buffer policy */
int sig; /*!< Signalling style */
int radio; /*!< radio type */
int outsigmod; /*!< Outbound Signalling style (modifier) */
@@ -468,6 +475,7 @@
unsigned int priexclusive:1;
unsigned int pulse:1;
unsigned int pulsedial:1; /*!< whether a pulse dial phone is detected */
+ unsigned int restartpending:1; /*!< flag to ensure counted only once for restart */
unsigned int restrictcid:1; /*!< Whether restrict the callerid -> only send ANI */
unsigned int threewaycalling:1;
unsigned int transfer:1;
@@ -648,7 +656,10 @@
.polarityonanswerdelay = 600,
- .sendcalleridafter = DEFAULT_CIDRINGS
+ .sendcalleridafter = DEFAULT_CIDRINGS,
+
+ .buf_policy = DAHDI_POLICY_IMMEDIATE,
+ .buf_no = numbufs
},
.timing = {
.prewinktime = -1,
@@ -746,7 +757,8 @@
}
} while (res);
/* Then break the poll */
- pthread_kill(pri->master, SIGURG);
+ if (pri->master != AST_PTHREADT_NULL)
+ pthread_kill(pri->master, SIGURG);
return 0;
}
#endif
@@ -782,11 +794,11 @@
static int dahdi_get_index(struct ast_channel *ast, struct dahdi_pvt *p, int nullok)
{
int res;
- if (p->subs[0].owner == ast)
+ if (p->subs[SUB_REAL].owner == ast)
res = 0;
- else if (p->subs[1].owner == ast)
+ else if (p->subs[SUB_CALLWAIT].owner == ast)
res = 1;
- else if (p->subs[2].owner == ast)
[... 15731 lines stripped ...]
More information about the asterisk-commits
mailing list