<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/2635edbca22e5dc4b280a02745767f057c95713f">https://github.com/macports/macports-base/commit/2635edbca22e5dc4b280a02745767f057c95713f</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 2635edbca portindex: modify tsv naming scheme
</span>2635edbca is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 2635edbca22e5dc4b280a02745767f057c95713f
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Nov 1 08:05:03 2022 +1100
<span style='display:block; white-space:pre;color:#404040;'> portindex: modify tsv naming scheme
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> With the former way, tsv values seemed to contain the wrong data
</span><span style='display:block; white-space:pre;color:#404040;'> occasionally. (Which seems an awful lot like a bug in the thread
</span><span style='display:block; white-space:pre;color:#404040;'> package...)
</span>---
src/port/portindex.tcl | 75 +++++++++++++++++++++++++-------------------------
1 file changed, 38 insertions(+), 37 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 0a0fe6a4c..31333612e 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;'>@@ -45,7 +45,7 @@ package require Thread
</span>
proc _read_index {idx} {
set offset $::qindex($idx)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- thread::mutex lock [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thread::mutex lock [tsv::get mutexes PortIndex]
</span> try {
seek $::oldfd $offset
gets $::oldfd in_line
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -53,7 +53,7 @@ proc _read_index {idx} {
</span> set len [lindex $in_line 1]
set out_line [read $::oldfd [expr {$len - 1}]]
} finally {
<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;'>+ thread::mutex unlock [tsv::get mutexes PortIndex]
</span> }
set name [lindex $in_line 0]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -110,22 +110,17 @@ proc _open_port {portinfo_name portdir absportdir port_options_name {subport {}}
</span> set portinfo(portdir) $portdir
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc pindex {portdir {subport {}}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$subport eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set tsv_varname $portdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set is_subport 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set tsv_varname ${portdir}/${subport}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set is_subport 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc pindex {portdir jobnum {subport {}}} {
</span> try {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname status 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $jobnum 1
</span> set absportdir [file join $::directory $portdir]
set portfile [file join $absportdir Portfile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$is_subport} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$subport ne ""} {
</span> set qname [string tolower $subport]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set is_subport 1
</span> } else {
set qname [string tolower [file tail $portdir]]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set is_subport 0
</span> }
# try to reuse the existing entry if it's still valid
if {$::full_reindex != 1 && [info exists ::qindex($qname)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -137,7 +132,7 @@ proc pindex {portdir {subport {}}} {
</span>
# reuse entry if it was made from the same portdir
if {[info exists portinfo(portdir)] && $portinfo(portdir) eq $portdir} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname output [list $name $len $line]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set output $jobnum [list $name $len $line]
</span>
if {!$is_subport} {
if {[info exists ::ui_options(ports_debug)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -146,11 +141,11 @@ proc pindex {portdir {subport {}}} {
</span>
# report any subports
if {[info exists portinfo(subports)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname subports $portinfo(subports)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set subports $jobnum $portinfo(subports)
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname status -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $jobnum -1
</span> return
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -170,12 +165,12 @@ proc pindex {portdir {subport {}}} {
</span> puts "Adding port $portdir"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname output [_index_from_portinfo portinfo $is_subport]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname mtime [file mtime $portfile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set output $jobnum [_index_from_portinfo portinfo $is_subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set mtime $jobnum [file mtime $portfile]
</span>
# report this portfile's subports (if any)
if {!$is_subport && [info exists portinfo(subports)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname subports $portinfo(subports)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set subports $jobnum $portinfo(subports)
</span> }
} on error {eMessage} {
if {$is_subport} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -186,14 +181,14 @@ proc pindex {portdir {subport {}}} {
</span> return
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname status 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $jobnum 0
</span> return
} trap {POSIX SIG SIGINT} {} {
puts stderr "SIGINT received, terminating."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname status 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $jobnum 99
</span> } trap {POSIX SIG SIGTERM} {} {
puts stderr "SIGTERM received, terminating."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $tsv_varname status 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $jobnum 99
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,15 +219,16 @@ proc init_threads {} {
</span> set ::maxjobs [macports:get_parallel_jobs no]
set ::poolid [tpool::create -minworkers $::maxjobs -maxworkers $::maxjobs -initcmd $::worker_init_script]
array set ::pending_jobs {}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set PortIndex mutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::nextjobnum 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set mutexes PortIndex [thread::mutex create]
</span> }
proc handle_completed_jobs {} {
set completed_jobs [tpool::wait $::poolid [array names ::pending_jobs]]
foreach completed_job $completed_jobs {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set portdir $::pending_jobs($completed_job)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $::pending_jobs($completed_job) jobnum portdir subport
</span> unset ::pending_jobs($completed_job)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::get $portdir status status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::get status $jobnum status
</span> # -1 = skipped, 0 = success, 1 = fail, 99 = exit
if {$status == 99} {
set ::exit_fail 1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -243,27 +239,31 @@ proc handle_completed_jobs {} {
</span> incr ::stats(total)
} elseif {$status == 0 || $status == -1} {
# queue jobs for subports
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[tsv::exists $portdir subports]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach subport [tsv::get $portdir subports] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set ${portdir}/${subport} status 99
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set jobid [tpool::post -nowait $::poolid [list pindex $portdir $subport]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::pending_jobs($jobid) ${portdir}/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$subport eq "" && [tsv::exists subports $jobnum]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach nextsubport [tsv::get subports $jobnum] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $::nextjobnum 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set jobid [tpool::post -nowait $::poolid [list pindex $portdir $::nextjobnum $nextsubport]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::pending_jobs($jobid) [list $::nextjobnum $portdir $nextsubport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr ::nextjobnum
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::unset subports $jobnum
</span> }
if {$status == -1} {
incr ::stats(skipped)
} else {
incr ::stats(total)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::get $portdir mtime mtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::get mtime $jobnum mtime
</span> if {$mtime > $::newest} {
set ::newest $mtime
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::unset mtime $jobnum
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- _write_index {*}[tsv::get $portdir output]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _write_index {*}[tsv::get output $jobnum]
</span> } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- error "Unknown status for ${portdir}: $status"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "Unknown status for job $jobnum (${portdir} $subport): $status"
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::unset $portdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::unset status $jobnum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::unset output $jobnum
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -280,9 +280,10 @@ proc pindex_queue {portdir} {
</span> # Now queue the new job.
# Start with worst status so we get it when the thread
# returns due to ctrl-c etc.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- tsv::set $portdir status 99
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set jobid [tpool::post -nowait $::poolid [list pindex $portdir {}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::pending_jobs($jobid) $portdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tsv::set status $::nextjobnum 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set jobid [tpool::post -nowait $::poolid [list pindex $portdir $::nextjobnum {}]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::pending_jobs($jobid) [list $::nextjobnum $portdir {}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr ::nextjobnum
</span> }
proc process_remaining {} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -291,7 +292,7 @@ proc process_remaining {} {
</span> handle_completed_jobs
}
tpool::release $::poolid
<span style='display:block; white-space:pre;background:#ffe0e0;'>- thread::mutex destroy [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thread::mutex destroy [tsv::get mutexes PortIndex]
</span> }
if {$argc > 8} {
</pre><pre style='margin:0'>
</pre>