Sanity check code for an extended failure in trying to obtain a channel lock that...
authorBJ Weschke <bweschke@btwtech.com>
Tue, 23 May 2006 17:31:05 +0000 (17:31 +0000)
committerBJ Weschke <bweschke@btwtech.com>
Tue, 23 May 2006 17:31:05 +0000 (17:31 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@29735 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 583a6f2..6a30bf4 100644 (file)
@@ -12098,6 +12098,7 @@ static int sipsock_read(int *id, int fd, short events, void *ignore)
        int nounlock;
        int recount = 0;
        char iabuf[INET_ADDRSTRLEN];
+       int lockretrycount = 0;
 
        len = sizeof(sin);
        memset(&req, 0, sizeof(req));
@@ -12156,7 +12157,15 @@ retrylock:
                        ast_mutex_unlock(&netlock);
                        /* Sleep infintismly short amount of time */
                        usleep(1);
-                       goto retrylock;
+                       lockretrycount++;
+                       if (lockretrycount < 100)
+                               goto retrylock;
+               }
+               if (lockretrycount > 100) {
+                       ast_log(LOG_ERROR, "We could NOT get the channel lock for %s! \n", p->owner->name);
+                       ast_log(LOG_ERROR, "SIP MESSAGE JUST IGNORED: %s \n", req.data);
+                       ast_log(LOG_ERROR, "BAD! BAD! BAD!\n");
+                       return 1;
                }
                p->recv = sin;
                if (recordhistory) /* This is a request or response, note what it was for */