Navigation


Changeset 691:78b665400097 in freeDiameter for libfdcore/sctp.c


Ignore:
Timestamp:
Jan 20, 2011, 7:44:27 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdcore/sctp.c

    r662 r691  
    822822       
    823823        /* Set the socket options */
    824         CHECK_FCT_DO( ret = fd_setsockopt_prebind(*sock), goto fail );
     824        CHECK_FCT_DO( ret = fd_setsockopt_prebind(*sock), goto out );
    825825       
    826826        /* Create the array of addresses, add first the configured addresses, then the discovered, then the other ones */
    827         CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF,              EP_FL_CONF        ), goto fail );
    828         CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, EP_FL_DISC        ), goto fail );
    829         CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, 0         ), goto fail );
     827        CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF,              EP_FL_CONF        ), goto out );
     828        CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, EP_FL_DISC        ), goto out );
     829        CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, 0         ), goto out );
    830830       
    831831        /* Try connecting */
     
    866866                /* Some errors are expected, we log at different level */
    867867                TRACE_DEBUG( lvl, "sctp_connectx returned an error: %s", strerror(ret));
    868                 goto fail;
     868                goto out;
    869869        }
    870870       
     
    872872       
    873873        /* Set the remaining sockopts */
    874         CHECK_FCT_DO( ret = fd_setsockopt_postbind(*sock, 1), goto fail_deco );
    875        
    876         /* Done! */
     874        CHECK_FCT_DO( ret = fd_setsockopt_postbind(*sock, 1),
     875                {
     876                        CHECK_SYS_DO( shutdown(*sock, SHUT_RDWR), /* continue */ );
     877                } );
     878       
     879out:
     880        ;
    877881        pthread_cleanup_pop(0);
    878         return 0;
    879        
    880 fail_deco:
    881         CHECK_SYS_DO( shutdown(*sock, SHUT_RDWR), /* continue */ );
    882 fail:
    883         if (*sock > 0) {
    884                 CHECK_SYS_DO( close(*sock), /* continue */ );
    885                 *sock = -1;
    886         }
    887         free(sar.buf);
     882       
     883        if (ret) {
     884                if (*sock > 0) {
     885                        CHECK_SYS_DO( close(*sock), /* continue */ );
     886                        *sock = -1;
     887                }
     888                free(sar.buf);
     889        }
    888890        return ret;
    889891}
Note: See TracChangeset for help on using the changeset viewer.