[svn-commits] trunk r206 - /trunk/asterisk-ooh323c/src/chan_h323.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Tue Apr 11 07:22:27 MST 2006


Author: objsys
Date: Tue Apr 11 09:22:26 2006
New Revision: 206

URL: http://svn.digium.com/view/asterisk-addons?rev=206&view=rev
Log:
contains 3 bug fixes

Modified:
    trunk/asterisk-ooh323c/src/chan_h323.c

Modified: trunk/asterisk-ooh323c/src/chan_h323.c
URL: http://svn.digium.com/view/asterisk-addons/trunk/asterisk-ooh323c/src/chan_h323.c?rev=206&r1=205&r2=206&view=diff
==============================================================================
--- trunk/asterisk-ooh323c/src/chan_h323.c (original)
+++ trunk/asterisk-ooh323c/src/chan_h323.c Tue Apr 11 09:22:26 2006
@@ -403,7 +403,7 @@
    if (!pvt->rtp) 
    {
       ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", 
-                                                            strerror(errno));
+              strerror(errno));
       ast_mutex_unlock(&pvt->lock);
       ast_mutex_destroy(&pvt->lock);
       free(pvt);
@@ -790,8 +790,7 @@
       if(gH323Debug)
          ast_verbose("    hanging %s\n", p->username);
 
-      if(!ast_test_flag(p, H323_ALREADYGONE))
-      {
+      if(!ast_test_flag(p, H323_ALREADYGONE)) {
          ast_mutex_lock(&ooh323c_cmd_lock);
          ooHangCall(p->callToken, 
              ooh323_convert_hangupcause_asteriskToH323(p->owner->hangupcause));
@@ -809,16 +808,16 @@
          p->owner = NULL;
       }
 
-     ast_mutex_unlock(&p->lock);
-     ast_mutex_lock(&usecnt_lock);
-     usecnt--;
-     ast_mutex_unlock(&usecnt_lock);
-   
-     /* Notify the module monitors that use count for resource has changed*/
-     ast_update_use_count();
+      ast_mutex_unlock(&p->lock);
+      ast_mutex_lock(&usecnt_lock);
+      usecnt--;
+      ast_mutex_unlock(&usecnt_lock);
+
+      /* Notify the module monitors that use count for resource has changed */
+      ast_update_use_count();
      
    }
-   else{
+   else {
       ast_log(LOG_ERROR, "No call to hangup\n" );
       return -1;
    }
@@ -1063,7 +1062,7 @@
       }
       ast_mutex_unlock(&p->lock);
    }
-   else{
+   else {
       if (!p->owner) {
          ast_mutex_unlock(&p->lock);
          ast_log(LOG_ERROR, "Channel has no owner\n");
@@ -1096,9 +1095,12 @@
 
    ast_log(LOG_DEBUG, "Received Digit: %c\n", digit);
    p = find_call(call);
-   if(!p)
-   {
+   if(!p) {
       ast_log(LOG_ERROR, "Failed to find a matching call.\n");
+      return -1;
+   }
+   if(!p->owner) {
+      ast_log(LOG_ERROR, "Channel has no owner\n");
       return -1;
    }
    ast_mutex_lock(&p->lock);
@@ -1383,33 +1385,35 @@
 int onCallCleared(ooCallData *call)
 {
    struct ooh323_pvt *p = NULL;
-   struct ast_channel *c=NULL;
+   int ownerLock = 0;
 
    if(gH323Debug)
       ast_verbose("---   onCallCleared %s \n", call->callToken);
 
    p = find_call(call); 
-   if (!p) {
-      return 0;
-   }
+   if (!p) { return 0; }
    ast_mutex_lock(&p->lock);
   
-   if(p->owner) {
-      while(ast_mutex_trylock(&p->owner->lock))
-      {
+   while(p->owner) {
+      if(ast_mutex_trylock(&p->owner->lock)) {
+         ooTrace(OOTRCLVLINFO, "Failed to grab lock, trying again\n");
          ast_log(LOG_DEBUG,"Failed to grab lock, trying again\n");
          ast_mutex_unlock(&p->lock);
          usleep(1);
          ast_mutex_lock(&p->lock);
-      }    
-
-      c = p->owner;
-
-      if(!ast_test_flag(p, H323_ALREADYGONE))
-      { /* NOTE Channel is not detached yet */
+      }
+      else {
+         ownerLock = 1; break;
+      }
+   }
+
+   if(ownerLock) {
+      if(!ast_test_flag(p, H323_ALREADYGONE)) { 
+
+         /* NOTE: Channel is not detached yet */
          ast_set_flag(p, H323_ALREADYGONE);
-         p->owner->hangupcause = ooh323_convert_hangupcause_h323ToAsterisk(
-                                                          call->callEndReason);
+         p->owner->hangupcause = 
+            ooh323_convert_hangupcause_h323ToAsterisk(call->callEndReason);
          p->owner->_softhangup |= AST_SOFTHANGUP_DEV;
          ast_mutex_unlock(&p->owner->lock);
          ast_queue_hangup(p->owner);
@@ -2539,10 +2543,9 @@
 
 int ooh323_destroy(struct ooh323_pvt *p)
 {
-  /* NOTE: Assumes iflock already acquired */
+   /* NOTE: Assumes iflock already acquired */
    struct ooh323_pvt *prev=NULL,*cur = NULL;
 
-   cur = iflist;
 
    if(gH323Debug)
    {
@@ -2552,10 +2555,11 @@
          ast_verbose(" Destroying %s\n", p->username);
    }
 
+   cur = iflist;
    while(cur)
    {
       if(cur == p) { break; }
-      prev=cur;
+      prev = cur;
       cur = cur->next;
    }
 
@@ -2583,9 +2587,9 @@
          free(cur->callerid_num);
 
 
-       if (cur->rtp)
-          ast_rtp_destroy(cur->rtp);
-
+      if (cur->rtp)
+         ast_rtp_destroy(cur->rtp);
+	
       /* Unlink us from the owner if we have one */
       if (cur->owner) {
          ast_mutex_lock(&cur->owner->lock);
@@ -2655,7 +2659,7 @@
   
 int unload_module()
 {
-   struct ooh323_pvt *p, *pl;
+   struct ooh323_pvt *p;
    struct ooAliases *cur=NULL, *prev=NULL;
 
    if(gH323Debug) {
@@ -2724,13 +2728,15 @@
       ast_verbose("  unload_module - freeing up memory used by interfaces\n");
    }
    if (!ast_mutex_lock(&iflock)) {
+      struct ooh323_pvt *pl;
+
       /* Destroy all the interfaces and free their memory */
       p = iflist;
       while(p) {
          pl = p;
          p = p->next;
          /* Free associated memory */
-         ooh323_destroy(p);
+         ooh323_destroy(pl);
       }
       iflist = NULL;
       ast_mutex_unlock(&iflock);



More information about the svn-commits mailing list