Skip to content

Commit 262e5f3

Browse files
committed
Save/restore extra tags when reloading modules
Update reloadModuleListUnloadPhase and reloadModuleListLoadPhase procedures to save extra tags of unloaded modules to re-inject them when reloading these modules.
1 parent 0717eb2 commit 262e5f3

File tree

5 files changed

+32
-15
lines changed

5 files changed

+32
-15
lines changed

tcl/modeval.tcl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,8 @@ proc reloadModuleListUnloadPhase {lmname {force 0} {errmsgtpl {}} {context\
678678
set isuasked($mod) [isModuleTagged $mod loaded 1]
679679
# save variants set for modules
680680
set vr($mod) [getVariantList $mod 1 2]
681+
# save extra tags set
682+
set extratag($mod) [getExtraTagList $mod]
681683
# force unload even if requiring mods are not part of the unload list
682684
# (violation state) as modules are loaded again just after
683685
if {[cmdModuleUnload $context match 0 1 0 0 $mod]} {
@@ -699,15 +701,16 @@ proc reloadModuleListUnloadPhase {lmname {force 0} {errmsgtpl {}} {context\
699701
lpopState reloading_sticky
700702
lpopState reloading_supersticky
701703
}
702-
return [list [array get isuasked] [array get vr]]
704+
return [list [array get isuasked] [array get vr] [array get extratag]]
703705
}
704706

705707
# load phase of a list of modules reload process
706-
proc reloadModuleListLoadPhase {lmname isuaskedlist vrlist {force 0}\
707-
{errmsgtpl {}} {context load}} {
708+
proc reloadModuleListLoadPhase {lmname isuaskedlist vrlist extrataglist\
709+
{force 0} {errmsgtpl {}} {context load}} {
708710
upvar $lmname lmlist
709711
array set isuasked $isuaskedlist
710712
array set vr $vrlist
713+
array set extratag $extrataglist
711714

712715
# loads are made with auto handling mode disabled to avoid disturbances
713716
# from a missing prereq automatically reloaded, so these module loads may
@@ -716,8 +719,9 @@ proc reloadModuleListLoadPhase {lmname isuaskedlist vrlist {force 0}\
716719
foreach mod $lmlist {
717720
# if an auto set default was excluded, module spec need parsing
718721
lassign [parseModuleSpecification 0 $mod {*}$vr($mod)] modnamevr
719-
# reload module with user asked property preserved
720-
if {[cmdModuleLoad $context $isuasked($mod) {} $modnamevr]} {
722+
# reload module with user asked property and extra tags preserved
723+
if {[cmdModuleLoad $context $isuasked($mod) $extratag($mod)\
724+
$modnamevr]} {
721725
set errMsg [string map [list _MOD_ [getModuleDesignation spec\
722726
$modnamevr]] $errmsgtpl]
723727
if {$force} {

tcl/subcmd.tcl.in

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -473,13 +473,15 @@ proc cmdModuleSwitch {uasked tag_list old {new {}}} {
473473
if {[info exists depreisuasked]} {
474474
set undepreisuasked $depreisuasked
475475
set undeprevr $deprevr
476+
set undepreextratag $depreextratag
476477
}
477478
cmdModuleLoad swload $uasked $tag_list $new
478479

479480
# merge depre info of unload and load phases
480481
if {[info exists undepreisuasked]} {
481482
set depreisuasked [list {*}$undepreisuasked {*}$depreisuasked]
482483
set deprevr [list {*}$undeprevr {*}$deprevr]
484+
set depreextratag [list {*}$undepreextratag {*}$depreextratag]
483485
}
484486

485487
if {[getConf auto_handling] && [info exists deprelist] && [llength\
@@ -490,7 +492,7 @@ proc cmdModuleSwitch {uasked tag_list old {new {}}} {
490492
# for the load phase of the DepRe mechanism.
491493
# Try DepRe load phase: load failure will not lead to switch failure
492494
reloadModuleListLoadPhase deprelist $depreisuasked $deprevr\
493-
1 {Reload of dependent _MOD_ failed} depre
495+
$depreextratag 1 {Reload of dependent _MOD_ failed} depre
494496
}
495497

496498
# report a summary of automated evaluations if no error
@@ -873,6 +875,7 @@ proc cmdModuleLoad {context uasked tag_list args} {
873875
upvar deprelist swdeprelist
874876
upvar depreisuasked depreisuasked
875877
upvar deprevr deprevr
878+
upvar depreextratag depreextratag
876879

877880
# transmit loaded mod name for switch report summary
878881
uplevel 1 set new "{$modnamevr}"
@@ -949,7 +952,7 @@ proc cmdModuleLoad {context uasked tag_list args} {
949952
if {[llength $deprelist] > 0} {
950953
lassign [reloadModuleListUnloadPhase deprelist [getState\
951954
force] {Unload of dependent _MOD_ failed} depun]\
952-
depreisuasked deprevr
955+
depreisuasked deprevr depreextratag
953956
if {[info exists swprocessing]} {
954957
if {[info exists swdeprelist]} {
955958
set swdeprelist [list {*}$deprelist {*}$swdeprelist]
@@ -1109,7 +1112,8 @@ proc cmdModuleLoad {context uasked tag_list args} {
11091112
if {[getConf auto_handling] && [llength $deprelist] > 0 && ![info\
11101113
exists swprocessing]} {
11111114
reloadModuleListLoadPhase deprelist $depreisuasked $deprevr\
1112-
[getState force] {Reload of dependent _MOD_ failed} depre
1115+
$depreextratag [getState force] {Reload of dependent _MOD_\
1116+
failed} depre
11131117
}
11141118

11151119
# consider evaluation hidden if hidden loaded module is auto loaded
@@ -1207,6 +1211,7 @@ proc cmdModuleUnload {context match auto force onlyureq onlyndep args} {
12071211
upvar deprelist deprelist
12081212
upvar depreisuasked depreisuasked
12091213
upvar deprevr deprevr
1214+
upvar depreextratag depreextratag
12101215

12111216
# transmit unloaded mod name for switch report summary
12121217
uplevel 1 set old "{$modnamevr}"
@@ -1338,7 +1343,7 @@ proc cmdModuleUnload {context match auto force onlyureq onlyndep args} {
13381343
if {[llength $deprelist] > 0} {
13391344
lassign [reloadModuleListUnloadPhase deprelist [getState\
13401345
force] {Unload of dependent _MOD_ failed} depun]\
1341-
depreisuasked deprevr
1346+
depreisuasked deprevr depreextratag
13421347
}
13431348

13441349
# DepUn modules unload prior main mod unload
@@ -1455,7 +1460,8 @@ proc cmdModuleUnload {context match auto force onlyureq onlyndep args} {
14551460
# will occur after the new mod load
14561461
if {[llength $deprelist] > 0 && ![info exists swprocessing]} {
14571462
reloadModuleListLoadPhase deprelist $depreisuasked $deprevr\
1458-
[getState force] {Reload of dependent _MOD_ failed} depre
1463+
$depreextratag [getState force] {Reload of dependent _MOD_\
1464+
failed} depre
14591465
}
14601466
}
14611467

@@ -1536,8 +1542,8 @@ proc cmdModuleReload {args} {
15361542
pushSettings
15371543
if {[set errCode [catch {
15381544
# run unload then load-again phases
1539-
lassign [reloadModuleListUnloadPhase lmlist] isuasked vr
1540-
reloadModuleListLoadPhase lmlist $isuasked $vr
1545+
lassign [reloadModuleListUnloadPhase lmlist] isuasked vr extratag
1546+
reloadModuleListLoadPhase lmlist $isuasked $vr $extratag
15411547
} errMsg]] == 1} {
15421548
# rollback settings if some evaluation went wrong
15431549
restoreSettings

testsuite/modules.50-cmds/377-error.exp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ lappend ans [list set __MODULES_LMCONFLICT rd&rf]
6262
lappend ans [list set __MODULES_LMPREREQ rd&ra|rb:rc&rb]
6363
lappend ans [list set _LMFILES_ $mp/rb:$mp/rd:$mp/rc]
6464
lappend ans [list set LOADEDMODULES rb:rd:rc]
65-
lappend ans [list set __MODULES_LMTAG rb&auto-loaded:rd&auto-loaded]
65+
#FIXME duplicate tag entry for rd
66+
lappend ans [list set __MODULES_LMTAG rd&auto-loaded:rb&auto-loaded:rd&auto-loaded]
6667
lappend ans [list ERR]
6768
set tserr [list {unload rd} {load ra} \n[msg_load ra $err_evalabort]\n {load rc} {unload rd} {load rb} {load rd} \n[msg_top_load rc {} rb rd]]
6869
testouterr_cmd_re sh {load ra rc} $ans [join $tserr \n]

testsuite/modules.50-cmds/450-hidden-loaded.exp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ set ans [list]
8989
lappend ans [list set __MODULES_LMPREREQ h2&h1:h4&h1&h2|h3]
9090
lappend ans [list set _LMFILES_ $mp/h1:$mp/h2:$mp/h3:$mp/h4]
9191
lappend ans [list set LOADEDMODULES h1:h2:h3:h4]
92-
lappend ans [list set __MODULES_LMTAG h1&auto-loaded&hidden-loaded:h2&auto-loaded:h3&hidden-loaded]
92+
lappend ans [list set __MODULES_LMTAG h1&hidden-loaded&auto-loaded:h2&auto-loaded:h3&hidden-loaded]
9393
testouterr_cmd_re sh {reload -v} $ans [msg_unload h4]\n[msg_unload h3]\n[msg_unload h2]\n[msg_load h2]\n[msg_load h3]\n[msg_load h4]
9494
unsetenv_loaded_module
9595
unsetenv_var __MODULES_LMPREREQ

testsuite/modules.50-cmds/465-tag-opt.exp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,12 @@ setenv_path_var __MODULES_LMPREREQ $mod&foo/1.0
10251025
setenv_path_var __MODULES_LMEXTRATAG foo/1.0&foo
10261026
setenv_path_var __MODULES_LMTAG foo/1.0&foo&keep-loaded&auto-loaded
10271027

1028+
set ans [list]
1029+
lappend ans [list set __MODULES_LMPREREQ $mod&foo/1.0]
1030+
lappend ans [list set _LMFILES_ $mp/foo/1.0:$modfile]
1031+
lappend ans [list set LOADEDMODULES foo/1.0:$mod]
1032+
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo]
1033+
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&auto-loaded&keep-loaded]
10281034
testouterr_cmd sh {reload} $ans {}
10291035

10301036
setenv_path_var __MODULES_LMEXTRATAG foo/1.0&foo:$mod&bar
@@ -1035,7 +1041,7 @@ lappend ans [list set __MODULES_LMPREREQ $mod&foo/1.0]
10351041
lappend ans [list set _LMFILES_ $mp/foo/1.0:$modfile]
10361042
lappend ans [list set LOADEDMODULES foo/1.0:$mod]
10371043
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo:$mod&bar]
1038-
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&keep-loaded&auto-loaded:$mod&bar]
1044+
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&auto-loaded&keep-loaded:$mod&bar]
10391045
testouterr_cmd sh {reload} $ans {}
10401046

10411047
unsetenv_loaded_module

0 commit comments

Comments
 (0)