The branch stable/13 has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=8522f7ddac08dfd383f3c0564f785567b71a5105

commit 8522f7ddac08dfd383f3c0564f785567b71a5105
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2021-08-31 11:43:39 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2021-09-07 13:36:19 +0000

    sctp: Simplify the free port search in sctp_inpcb_bind()
    
    Eliminate a flag variable and reduce indentation.  No functional change
    intended.
    
    Reviewed by:    tuexen
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 2496d812a9c781f8e4be1bfd22375c6e686665da)
---
 sys/netinet/sctp_pcb.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index f55c3d4891a6..def6292456d4 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -3012,7 +3012,6 @@ continue_anyway:
        } else {
                uint16_t first, last, candidate;
                uint16_t count;
-               int done;
 
                if (ip_inp->inp_flags & INP_HIGHPORT) {
                        first = MODULE_GLOBAL(ipport_hifirstauto);
@@ -3040,25 +3039,22 @@ continue_anyway:
                count = last - first + 1;       /* number of candidates */
                candidate = first + sctp_select_initial_TSN(&inp->sctp_ep) % 
(count);
 
-               done = 0;
-               while (!done) {
+               for (;;) {
                        if (sctp_isport_inuse(inp, htons(candidate), 
inp->def_vrf_id) == NULL) {
-                               done = 1;
+                               lport = htons(candidate);
+                               break;
                        }
-                       if (!done) {
-                               if (--count == 0) {
-                                       SCTP_INP_WUNLOCK(inp);
-                                       SCTP_INP_INFO_WUNLOCK();
-                                       SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_PCB, EADDRINUSE);
-                                       return (EADDRINUSE);
-                               }
-                               if (candidate == last)
-                                       candidate = first;
-                               else
-                                       candidate = candidate + 1;
+                       if (--count == 0) {
+                               SCTP_INP_WUNLOCK(inp);
+                               SCTP_INP_INFO_WUNLOCK();
+                               SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_PCB, EADDRINUSE);
+                               return (EADDRINUSE);
                        }
+                       if (candidate == last)
+                               candidate = first;
+                       else
+                               candidate = candidate + 1;
                }
-               lport = htons(candidate);
        }
        if (inp->sctp_flags & (SCTP_PCB_FLAGS_SOCKET_GONE |
            SCTP_PCB_FLAGS_SOCKET_ALLGONE)) {
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to