Merged revisions 289554 via svnmerge from
authorMatthew Nicholson <mnicholson@digium.com>
Thu, 30 Sep 2010 19:54:59 +0000 (19:54 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Thu, 30 Sep 2010 19:54:59 +0000 (19:54 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r289554 | mnicholson | 2010-09-30 14:53:10 -0500 (Thu, 30 Sep 2010) | 11 lines

  Merged revisions 289553 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2

  ........
    r289553 | mnicholson | 2010-09-30 14:51:27 -0500 (Thu, 30 Sep 2010) | 4 lines

    Properly handle channel allocation failures duing invites with replaces.

    ABE-2588
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@289555 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 650a01d..38f9b33 100644 (file)
@@ -21396,7 +21396,8 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
                        /* Initialize our tag */
 
                        make_our_tag(p->tag, sizeof(p->tag));
-                       /* First invitation - create the channel */
+                       /* First invitation - create the channel.  Allocation
+                        * failures are handled below. */
                        c = sip_new(p, AST_STATE_DOWN, S_OR(p->peername, NULL), NULL);
                        if (cc_recall_core_id != -1) {
                                ast_setup_cc_recall_datastore(c, cc_recall_core_id);
@@ -21573,7 +21574,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
        if (!req->ignore && p)
                p->lastinvite = seqno;
 
-       if (replace_id) {       /* Attended transfer or call pickup - we're the target */
+       if (c && replace_id) {  /* Attended transfer or call pickup - we're the target */
                if (!ast_strlen_zero(pickup.exten)) {
                        append_history(p, "Xfer", "INVITE/Replace received");