<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/a5227fa90e11126c075e23e2302c23bf05d54682">https://github.com/macports/macports-base/commit/a5227fa90e11126c075e23e2302c23bf05d54682</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new a5227fa90 portindex: ensure mutex is unlocked on error
</span>a5227fa90 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit a5227fa90e11126c075e23e2302c23bf05d54682
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Nov 1 01:17:26 2022 +1100

<span style='display:block; white-space:pre;color:#404040;'>    portindex: ensure mutex is unlocked on error
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also adjust status code handling a bit.
</span>---
 src/port/portindex.tcl | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/portindex.tcl b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 74910a3da..0a0fe6a4c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -46,12 +46,15 @@ package require Thread
</span> proc _read_index {idx} {
     set offset $::qindex($idx)
     thread::mutex lock [tsv::get PortIndex mutex]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    seek $::oldfd $offset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    gets $::oldfd in_line
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    try {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        seek $::oldfd $offset
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        gets $::oldfd in_line
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set len  [lindex $in_line 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set out_line [read $::oldfd [expr {$len - 1}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex unlock [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set len  [lindex $in_line 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set out_line [read $::oldfd [expr {$len - 1}]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        thread::mutex unlock [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span>     set name [lindex $in_line 0]
 
     return [list $name $len $out_line]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -115,9 +118,10 @@ proc pindex {portdir {subport {}}} {
</span>         set tsv_varname ${portdir}/${subport}
         set is_subport 1
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set absportdir [file join $::directory $portdir]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set portfile [file join $absportdir Portfile]
</span>     try {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::set $tsv_varname status 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set absportdir [file join $::directory $portdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portfile [file join $absportdir Portfile]
</span>         if {$is_subport} {
             set qname [string tolower $subport]
         } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -179,11 +183,11 @@ proc pindex {portdir {subport {}}} {
</span>             } else {
                 puts stderr "Failed to parse file $portdir/Portfile: $eMessage"
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsv::set $tsv_varname status 1
</span>             return
         }
 
         tsv::set $tsv_varname status 0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        return
</span>     } trap {POSIX SIG SIGINT} {} {
         puts stderr "SIGINT received, terminating."
         tsv::set $tsv_varname status 99
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -237,7 +241,7 @@ proc handle_completed_jobs {} {
</span>         } elseif {$status == 1} {
             incr ::stats(failed)
             incr ::stats(total)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {$status == 0 || $status == -1} {
</span>             # queue jobs for subports
             if {[tsv::exists $portdir subports]} {
                 foreach subport [tsv::get $portdir subports] {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -256,6 +260,8 @@ proc handle_completed_jobs {} {
</span>                 }
             }
             _write_index {*}[tsv::get $portdir output]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            error "Unknown status for ${portdir}: $status"
</span>         }
         tsv::unset $portdir
     }
</pre><pre style='margin:0'>

</pre>