Skip to content

Commit ca2877a

Browse files
Perf: defer Windows VC++ runtime probe to init failure path (#54)
Skips the registry probe during module import; only runs it as a diagnostic if native sodium_init() throws on Windows. Reduces cold-start overhead.
1 parent b18eabc commit ca2877a

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

src/functions/private/Initialize-Sodium.ps1

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,14 @@
1919
if (-not $script:Supported) { throw 'Sodium is not supported on this platform.' }
2020
if ($script:SodiumInitialized) { return }
2121

22-
$initializationResult = [PSModule.Sodium]::sodium_init()
22+
try {
23+
$initializationResult = [PSModule.Sodium]::sodium_init()
24+
} catch {
25+
if ($IsWindows) {
26+
$script:Supported = Assert-VisualCRedistributableInstalled -Version '14.0' -Architecture $script:ProcessArchitecture
27+
}
28+
throw
29+
}
2330
if ($initializationResult -lt 0) {
2431
throw 'Sodium initialization failed.'
2532
}

src/main.ps1

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ switch ($true) {
3636
$assemblyPath = Join-Path -Path $PSScriptRoot -ChildPath "libs/$runtimeIdentifier/PSModule.Sodium.dll"
3737
Import-Module $assemblyPath -ErrorAction Stop
3838

39-
if ($IsWindows) {
40-
$script:Supported = Assert-VisualCRedistributableInstalled -Version '14.0' -Architecture $processArchitecture.ToString()
41-
} else {
42-
$script:Supported = $true
43-
}
39+
# Optimistically mark supported; Initialize-Sodium will run the Windows VC++ runtime check lazily only if native init fails.
40+
$script:Supported = $true
41+
$script:ProcessArchitecture = $processArchitecture.ToString()

0 commit comments

Comments
 (0)