diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 1890bbb3d7da3cb7f66f9fa96d64d9d2ecd339d4..9bfddae2f7c1339dbb4f916d07a3123a085fc1c9 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -10999,7 +10999,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, analog_p->polarityonanswerdelay = conf->chan.polarityonanswerdelay; analog_p->answeronpolarityswitch = conf->chan.answeronpolarityswitch; analog_p->hanguponpolarityswitch = conf->chan.hanguponpolarityswitch; - analog_p->permcallwaiting = 1; + analog_p->permcallwaiting = conf->chan.callwaiting; /* permcallwaiting possibly modified in analog_config_complete */ analog_p->callreturn = conf->chan.callreturn; analog_p->cancallforward = conf->chan.cancallforward; analog_p->canpark = conf->chan.canpark; @@ -11016,7 +11016,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, analog_p->cid_signalling = conf->chan.cid_signalling; analog_p->stripmsd = conf->chan.stripmsd; analog_p->cid_start = ANALOG_CID_START_RING; - tmp->callwaitingcallerid = analog_p->callwaitingcallerid = 1; + analog_p->callwaitingcallerid = conf->chan.callwaitingcallerid; analog_p->usedistinctiveringdetection = conf->chan.usedistinctiveringdetection; analog_p->ringt = conf->chan.ringt; analog_p->ringt_base = ringt_base; @@ -11322,12 +11322,6 @@ static struct ast_channel *dahdi_request(const char *type, int format, const str break; } } - if (p->owner) { - if (alloc_sub(p, SUB_CALLWAIT)) { - p = NULL; - break; - } - } p->outgoing = 1; if (analog_lib_handles(p->sig, p->radio, p->oprmode)) { tmp = analog_request(p->sig_pvt, &callwait, requestor); diff --git a/channels/sig_analog.c b/channels/sig_analog.c index 3488c7f558643d8e64af7ff1bfb0ee25b4e398c6..49b9c6bd598f3e5e12fb0ba98feda87242ca7e61 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -289,9 +289,13 @@ static void analog_swap_subs(struct analog_pvt *p, enum analog_sub a, enum analo static int analog_alloc_sub(struct analog_pvt *p, enum analog_sub x) { - p->subs[x].allocd = 1; - if (p->calls->allocate_sub) - return p->calls->allocate_sub(p->chan_pvt, x); + if (p->calls->allocate_sub) { + int res; + res = p->calls->allocate_sub(p->chan_pvt, x); + if (!res) + p->subs[x].allocd = 1; + return res; + } return 0; }