Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
282 commits
Select commit Hold shift + click to select a range
b5ba867
HttpClient_WinInet: close session handle even when request handle is …
bmehta001 Jun 22, 2026
652e5e5
Offline storage: guard empty-filter delete + propagate SQLite store f…
bmehta001 Jun 22, 2026
325c55b
Add MemoryStorage empty-filter delete regression test
bmehta001 Jun 22, 2026
d9640b7
Address review comment: propagate synchronous disk store failures
bmehta001 Jun 22, 2026
f1b3381
Prevent event loss when a disk write fails during Flush()
bmehta001 Jun 23, 2026
45e9d55
Address Copilot comment: NoopTaskDispatcher::Cancel returns found-state
bmehta001 Jun 23, 2026
bab7b42
Address Copilot comments: rename flush test for precision
bmehta001 Jun 23, 2026
e9c7ee3
Merge remote-tracking branch 'msft/main' into bhamehta/fix-storage-da…
bmehta001 Jun 23, 2026
84e49a6
Fold the SQLite batch-flush optimization into the data-safety change …
bmehta001 Jun 23, 2026
e1e7c4e
Address Copilot: make StoreRecords fully all-or-nothing on invalid re…
bmehta001 Jun 23, 2026
40fd118
Address Copilot: re-queue the flush batch only on a zero store result
bmehta001 Jun 23, 2026
97fee8e
Merge branch 'main' into bhamehta/fix-storage-data-safety
bmehta001 Jun 24, 2026
dcbc2a2
Merge branch 'main' into bhamehta/fix-curl-async-self-join
bmehta001 Jun 30, 2026
8935ef2
Merge branch 'main' into bhamehta/runtime-fixes
bmehta001 Jun 30, 2026
937d3ac
Fix PrivacyGuard JNI UAF, RoInitialize leak, and missing low_battery …
bmehta001 Jul 2, 2026
82cffa1
Fix GetAndReserveRecords data race (#1221) and SQLite shutdown leak (…
bmehta001 Jul 2, 2026
03cf210
Balance RoInitialize with an RAII guard (Copilot round-1)
bmehta001 Jul 2, 2026
2905ca7
Add test for low_battery transmit-profile powerState (#312)
bmehta001 Jul 2, 2026
e8db589
Guard checkpoint-on-flush against null disk storage (Copilot round-3)
bmehta001 Jul 2, 2026
62ffbbd
Merge branch 'main' into bhamehta/fix-storage-data-safety
bmehta001 Jul 2, 2026
dd9e023
Add teardown-during-in-flight-upload smoke test
bmehta001 Jul 6, 2026
6be37b1
Fix teardown deadlock: always signal flush completion
bmehta001 Jul 8, 2026
7a14e76
Merge branch 'main' into bhamehta/fix-curl-async-self-join
bmehta001 Jul 8, 2026
6bf8f55
Merge remote-tracking branch 'origin/main' into bhamehta/fix-curl-asy…
bmehta001 Jul 8, 2026
150e376
Replace std::async with a self-keepalive detached worker (real fix fo…
bmehta001 Jul 8, 2026
854f2dd
Merge remote-tracking branch 'fork/bhamehta/fix-curl-async-self-join'…
bmehta001 Jul 8, 2026
a12525e
Address Copilot round on #1481: own the body, catch worker exceptions…
bmehta001 Jul 8, 2026
23486a6
Address Copilot round 2 on #1481: move body, deterministic test host,…
bmehta001 Jul 8, 2026
80b9c80
Merge remote-tracking branch 'msft/main' into bhamehta/runtime-fixes
bmehta001 Jul 8, 2026
ce1699e
Drain pending tasks in the worker on shutdown to avoid a self-Join leak
bmehta001 Jul 8, 2026
4ccc9ea
Address Copilot round 3 on #1481: guard worker-thread start, harden t…
bmehta001 Jul 8, 2026
e6769f1
Assert the /slow/ endpoint rewrite in the teardown smoke test
bmehta001 Jul 8, 2026
cc8ece8
Cast chrono counts to long long in %lld LOG_TRACE calls
bmehta001 Jul 9, 2026
f9262e0
Address Copilot round 5 on #1481: <limits> include, broaden thread-st…
bmehta001 Jul 9, 2026
a1da06f
Address Copilot round 6 on #1481: guard shared_from_this() in SendAsync
bmehta001 Jul 9, 2026
23b6f9a
Correct the body-move comment in SendRequestAsync (#1481 review round 7)
bmehta001 Jul 9, 2026
62395c7
Harden NoSelfJoin test timeout path (#1481 review round 8)
bmehta001 Jul 9, 2026
9ae7dd5
Move worker-lambda construction inside the try in SendAsync (#1481 re…
bmehta001 Jul 9, 2026
1ff4b52
Drop issue-number references from code comments
bmehta001 Jul 9, 2026
c10f636
Drop issue-number reference from teardown smoke-test comment
bmehta001 Jul 9, 2026
21233a6
Drop issue-number reference from metastats opt-in comments
bmehta001 Jul 9, 2026
b1e03d8
Guarantee the callback fires even when Send() throws
bmehta001 Jul 9, 2026
31877df
Merge branch 'main' into bhamehta/fix-storage-data-safety
bmehta001 Jul 9, 2026
689b61a
Fix data-loss and queue-wedge in SQLite batched flush
bmehta001 Jul 10, 2026
6d2dd1a
Fix out-of-bounds timer access in transmit-profile debug logging
bmehta001 Jul 10, 2026
f200af9
Address Copilot review: correct Flush comment and size_t format speci…
bmehta001 Jul 10, 2026
cf9bc95
Fix use-after-free dispatching OnDestroy after the completion callback
bmehta001 Jul 10, 2026
f2af5ec
Address review: include <utility>, correct OnDestroy comment, harden …
bmehta001 Jul 10, 2026
46e8b1d
Merge remote-tracking branch 'msft/main' into bhamehta/runtime-fixes
bmehta001 Jul 10, 2026
099348f
Fix use-after-free when the last worker reference is released on its …
bmehta001 Jul 10, 2026
4af8401
Fix two curl-client lifetime issues found in review
bmehta001 Jul 10, 2026
89491fd
Harden curl-client shutdown: complete-on-send and skip unsafe global …
bmehta001 Jul 10, 2026
9d69b19
Harden the completion-guard regression test against the timeout path
bmehta001 Jul 10, 2026
bfabf8c
Clarify ~CurlHttpOperation comment for never-sent and synchronous-fal…
bmehta001 Jul 10, 2026
e25c43c
Correct the OnDestroy comment: suppressed once a send is attempted
bmehta001 Jul 10, 2026
8e6575b
Wait for the operation to be destroyed in the self-join test's timeou…
bmehta001 Jul 10, 2026
d2c69dd
Wait for the operation to be destroyed on the self-join test's succes…
bmehta001 Jul 10, 2026
8650ce1
Guarantee async ops are destroyed before teardown in both self-join t…
bmehta001 Jul 10, 2026
bd49de4
Hard-stop if a detached curl worker refuses to drain before teardown
bmehta001 Jul 10, 2026
be00ea0
Make worker self-dispose detection survive a prior detach()
bmehta001 Jul 11, 2026
9dd565a
Address review: portable worker-id storage and fix thread-id logging UB
bmehta001 Jul 12, 2026
42d448c
Fix curl worker shutdown lifetime
bmehta001 Jul 13, 2026
b9d9d03
Avoid public queue-result dispatcher virtual
bmehta001 Jul 13, 2026
c86e954
Harden batched flush retry handling
bmehta001 Jul 13, 2026
6b793ad
Simplify curl worker lifetime handling
bmehta001 Jul 30, 2026
88f5c8f
Preserve curl completion semantics on worker failures
bmehta001 Jul 30, 2026
48ad566
Merge microsoft/main into the curl self-join fix
bmehta001 Jul 30, 2026
7cdf393
Handle latency-off drops and share disk validation
bmehta001 Jul 31, 2026
7ef8109
Fix deferred task lifetime tracking and shutdown cleanup
bmehta001 Jul 31, 2026
d325700
Guard OfflineStorageHandler::Flush against leaking StartActivity on e…
bmehta001 Aug 1, 2026
6a1c050
Default Win32 desktop transport to WinHTTP instead of WinInet
bmehta001 Aug 1, 2026
074c6e4
Leak LogManagerFactory and PAL singletons to avoid static-destruction…
bmehta001 Aug 1, 2026
e28ae45
fix winhttp teardown hang on cancellation
bmehta001 Aug 3, 2026
0885742
Merge branch 'main' into bhamehta/fix-storage-data-safety
bmehta001 Aug 3, 2026
b73beec
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 3, 2026
2ef5a64
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 4, 2026
035d2d4
Fix WinHTTP cancellation completion race
bmehta001 Aug 4, 2026
aae640e
Merge upstream main into runtime fixes
bmehta001 Aug 4, 2026
d803615
Fix shutdown and flush review findings
bmehta001 Aug 5, 2026
fece2b2
Guard flush exception completion
bmehta001 Aug 5, 2026
f227d3f
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 5, 2026
287dbc8
Join stress-test upload workers before teardown
bmehta001 Aug 5, 2026
f7fb6f4
Prevent WinHTTP request wrapper use-after-free
bmehta001 Aug 5, 2026
36e4927
Merge branch 'main' into bhamehta/runtime-fixes
bmehta001 Aug 5, 2026
b2bd27b
Align vcpkg iOS deployment target
bmehta001 Aug 6, 2026
ca440fc
Harden Apple packaging integration
bmehta001 Aug 6, 2026
c96f7de
Migrate Apple builds to canonical CMake variables
bmehta001 Aug 7, 2026
bfc2f6a
Harden teardown and preserve failed flush records
bmehta001 Aug 7, 2026
e942b93
Merge remote-tracking branch 'origin/bhamehta/runtime-fixes' into bha…
bmehta001 Aug 7, 2026
50d283a
Remove unused Windows transport dependencies
bmehta001 Aug 7, 2026
159645b
Harden flush and worker teardown recovery
bmehta001 Aug 7, 2026
e49cb76
Merge PR #1491 batched offline storage flush
bmehta001 Aug 7, 2026
ab40f93
Make activity cleanup non-throwing
bmehta001 Aug 7, 2026
f6853b6
Merge origin/main into runtime fixes
bmehta001 Aug 7, 2026
ba35371
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 7, 2026
8d45721
Add direct test standard library includes
bmehta001 Aug 7, 2026
c5ed4dc
Rollback batched storage when an insert throws
bmehta001 Aug 7, 2026
715800d
Merge remote-tracking branch 'origin/main' into bhamehta/winhttp-defa…
bmehta001 Aug 8, 2026
85116f0
Merge branch 'main' into bhamehta/fix-curl-async-self-join
bmehta001 Aug 8, 2026
aa80a93
Fix WinHTTP duplicate completion during teardown
bmehta001 Aug 8, 2026
6deff3f
Merge remote-tracking branch 'origin/bhamehta/winhttp-default-windows…
bmehta001 Aug 8, 2026
927515f
Merge upstream main after PR 1511
bmehta001 Aug 8, 2026
d952202
Keep WinHTTP callback context alive through close
bmehta001 Aug 8, 2026
da1fe11
Make cancellation stress test deterministic
bmehta001 Aug 8, 2026
0303c83
Avoid fixture socket overflow in cancellation stress test
bmehta001 Aug 8, 2026
f03af17
Prepare WinHTTP for bounded cancellation
bmehta001 Aug 8, 2026
38d1e21
Merge PR 1481 Curl lifetime fix
bmehta001 Aug 8, 2026
2a1823c
Align bounded cancellation integration
bmehta001 Aug 8, 2026
4c8d94c
Prepare request draining for PR 1494
bmehta001 Aug 8, 2026
9bd4ae2
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 8, 2026
dd09470
Merge latest Microsoft main
bmehta001 Aug 8, 2026
62471df
Handle nil Apple responses during cancellation
bmehta001 Aug 9, 2026
8b38be1
Fix teardown deadlock when flush is skipped during pause
bmehta001 Aug 9, 2026
9d1b3ec
Merge remote-tracking branch 'origin/bhamehta/winhttp-default-windows…
bmehta001 Aug 9, 2026
afb12aa
Keep Apple requests alive through cancellation callbacks
bmehta001 Aug 9, 2026
8d3b67a
Fix process-terminating fastfail in oneds_memcpy_s on MSVC
bmehta001 Aug 9, 2026
c3c1ce3
Fix SQLite batch accounting and benchmark
bmehta001 Aug 9, 2026
0104294
Select curl HTTP version at runtime instead of forcing HTTP/2
bmehta001 Aug 9, 2026
c457bb6
Prevent SIGPIPE from killing the test process on peer reset
bmehta001 Aug 9, 2026
1056ed7
Always release SQLite storage during shutdown
bmehta001 Aug 9, 2026
933ad80
Fix WinHTTP shutdown deadlock when a send fails synchronously
bmehta001 Aug 9, 2026
880c5df
Use stable worker identity for self-cancellation
bmehta001 Aug 9, 2026
660aa2a
Bound offline storage flush batches
bmehta001 Aug 9, 2026
21b645f
Bound offline flush batches to prevent CI timeouts
bmehta001 Aug 9, 2026
a97db6d
Drain late WinHTTP requests during shutdown
bmehta001 Aug 9, 2026
5fd5d90
Relax database session timestamp test timing
bmehta001 Aug 9, 2026
226b0b7
Select one Win32 HTTP transport in CMake
bmehta001 Aug 10, 2026
2bb62b6
Make Annex K overlap checks overflow-safe
bmehta001 Aug 10, 2026
568daa2
Remove formatter exclusion and validate curl response info
bmehta001 Aug 10, 2026
b3b1870
Fix WinHTTP certificate validation
bmehta001 Aug 10, 2026
d981d63
Check Curl option configuration failures
bmehta001 Aug 10, 2026
78bc0c9
Harden WinHTTP response handling
bmehta001 Aug 10, 2026
a3df0d5
Harden transport response and handle cleanup
bmehta001 Aug 10, 2026
abcf98f
Wait for asynchronous kill-switch drops
bmehta001 Aug 10, 2026
2cdd5f5
Allow slower functional test responses
bmehta001 Aug 10, 2026
b4609d3
Restore diagnostic functional test timeouts
bmehta001 Aug 10, 2026
3e72773
Preserve WinHTTP setup failures
bmehta001 Aug 10, 2026
c0f5967
Keep WinHTTP responses when optional headers are unavailable
bmehta001 Aug 10, 2026
f77202a
Apply WinHTTP root checks only to HTTPS
bmehta001 Aug 10, 2026
81bd9cd
Reuse Curl callback byte count
bmehta001 Aug 10, 2026
9c980fa
Match Curl callback signatures
bmehta001 Aug 10, 2026
d9de71a
Harden final Windows transport review fixes
bmehta001 Aug 10, 2026
6296de7
Select one legacy Windows transport
bmehta001 Aug 10, 2026
c26517f
Wire WinHTTP through consumers
bmehta001 Aug 10, 2026
4191dea
Fix SampleCppMini project paths
bmehta001 Aug 10, 2026
5056f9d
Fix standalone sample paths and warning errors
bmehta001 Aug 10, 2026
dee384a
Clean up SampleCppMini build settings
bmehta001 Aug 10, 2026
4d3ef4c
Avoid unused-port cancellation test hangs
bmehta001 Aug 11, 2026
3b27ec1
Inject offline storage dependencies for testable recovery
bmehta001 Aug 11, 2026
8d7b3ff
De-duplicate SampleCppMini linker dependencies
bmehta001 Aug 11, 2026
d3f64a3
Use shared unused-parameter macro
bmehta001 Aug 11, 2026
80f19de
Use explicit fixture base URL
bmehta001 Aug 11, 2026
5b6e163
Serialize WinHTTP handle operations
bmehta001 Aug 11, 2026
9ddb81e
Guard legacy Curl socket conversion
bmehta001 Aug 11, 2026
7afef1c
Treat socket poll errors as failures
bmehta001 Aug 11, 2026
6633a14
Close callback and legacy lifetime gaps
bmehta001 Aug 11, 2026
3298439
Preserve Curl option setup order
bmehta001 Aug 11, 2026
929caf6
Pair Curl callback options with userdata
bmehta001 Aug 11, 2026
77773fa
Fix teardown cancellation wait semantics
bmehta001 Aug 11, 2026
d552f09
Prevent teardown races and duplicate offline retries
bmehta001 Aug 11, 2026
73dfea6
Avoid test config construction UB
bmehta001 Aug 11, 2026
44d3eee
Harden Curl async request completion
bmehta001 Aug 12, 2026
b39a383
Harden Windows HTTP cancellation lifetimes
bmehta001 Aug 12, 2026
fd4ebb5
Default Windows builds to WinHTTP
bmehta001 Aug 12, 2026
c3faeac
Reject invalid SQLite event latencies
bmehta001 Aug 12, 2026
54f115f
Harden teardown, storage, and callback lifetimes
bmehta001 Aug 12, 2026
f1b482f
Serialize deferred task and offline flush teardown
bmehta001 Aug 13, 2026
875d151
Harden Windows transport callback teardown
bmehta001 Aug 13, 2026
47ca55b
Fail fast across both Windows HTTP transports
bmehta001 Aug 13, 2026
104a67d
Honor HTTP completion contracts on Apple and Curl
bmehta001 Aug 13, 2026
ea2e022
Preserve offline records after flush failures
bmehta001 Aug 13, 2026
b9865d3
Require the canonical SQLite provider option
bmehta001 Aug 13, 2026
56eb592
Focus WinInet CI on production builds
bmehta001 Aug 13, 2026
e932e93
Document HTTP response request correlation
bmehta001 Aug 13, 2026
845542d
Wait for deferred task destruction in PAL test
bmehta001 Aug 13, 2026
f4794c2
Drop the legacy SQLite option guard
bmehta001 Aug 13, 2026
667d989
Restore SampleCppMini deployment behavior
bmehta001 Aug 17, 2026
851c4b4
Propagate SQLite persistence failures
bmehta001 Aug 17, 2026
b804004
Keep SQLite failure tests warning-clean
bmehta001 Aug 17, 2026
33d0503
Serialize offline flush lifecycle
bmehta001 Aug 17, 2026
76a7eb9
Release worker lock before cancellation waits
bmehta001 Aug 17, 2026
71acd20
Evaluate WinInet certificate policy after TLS
bmehta001 Aug 17, 2026
f3c1f20
Clarify HTTP request ownership
bmehta001 Aug 17, 2026
58007b6
Harden Apple HTTP terminal completion
bmehta001 Aug 17, 2026
c908b53
Quiesce Curl operations before client teardown
bmehta001 Aug 17, 2026
1fe6f75
Order Curl lifecycle events around cancellation
bmehta001 Aug 18, 2026
ebbc6de
Scope HTTP ownership to built-in transports
bmehta001 Aug 18, 2026
5373f64
Compile payload decoder tests under MSBuild
bmehta001 Aug 18, 2026
dc28dc2
Harden cancellation for fleet rollout
bmehta001 Aug 22, 2026
6f0d6c2
Document C API cancellation contract
bmehta001 Aug 22, 2026
329cd31
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Aug 28, 2026
4cd89fa
Settle uploads when response processing fails
bmehta001 Aug 28, 2026
d6d506c
Merge remote updates into WinHTTP transport changes
bmehta001 Aug 28, 2026
5c1efd7
Track merged modules failure-settlement branch
bmehta001 Aug 28, 2026
2a9cd8f
Preserve memory-only records during flush
bmehta001 Aug 30, 2026
7bbdda2
Merge branch 'main' of ssh://github.com/microsoft/cpp_client_telemetr…
bmehta001 Aug 30, 2026
ca544f4
Harden transport certificate and cancellation handling
bmehta001 Aug 31, 2026
705b193
Remove unnecessary implementation friendships
bmehta001 Aug 31, 2026
3253fe5
Handle stale kqueue events in HTTP tests
bmehta001 Aug 31, 2026
9a7b37c
Merge concurrent PR updates before test fixes
bmehta001 Aug 31, 2026
5bd98d8
Prevent SIGPIPE in HTTP cancellation tests
bmehta001 Aug 31, 2026
a45f0d6
Eliminate Android JNI compiler warnings
bmehta001 Sep 1, 2026
c82e48c
Match Windows linkage to the selected transport
bmehta001 Sep 1, 2026
10ca012
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Sep 2, 2026
e707f7c
Complete transport handoffs before callbacks
bmehta001 Sep 2, 2026
cfd9480
Merge concurrent PR updates before review fixes
bmehta001 Sep 2, 2026
c4c8a5f
Support no-exception transport teardown
bmehta001 Sep 2, 2026
8762b34
Bound curl connection establishment
bmehta001 Sep 2, 2026
75b35c3
Prevent cancellation callback loss
bmehta001 Sep 4, 2026
356f2ee
Nit
bmehta001 Sep 4, 2026
d407c67
Prevent dropped HTTP callbacks from blocking shutdown
bmehta001 Sep 4, 2026
405d1a6
Merge remote WinInet review update
bmehta001 Sep 4, 2026
26dfa1f
Make Apple setup cancellation win terminal race
bmehta001 Sep 4, 2026
84f4a02
Drain PAL test tasks before fatal failures
bmehta001 Sep 4, 2026
ecb3e06
Avoid HTTP handoff deadlocks and test races
bmehta001 Sep 4, 2026
c37049e
Evaluate event filters outside the collection lock
bmehta001 Sep 4, 2026
987939a
Push changes
bmehta001 Sep 7, 2026
6d05f60
Simplify Curl callback accounting
bmehta001 Sep 13, 2026
02bf939
Avoid session sidecars for in-memory storage
bmehta001 Sep 14, 2026
3cadd03
Merge branch 'main' into bhamehta/avoid-in-memory-session-sidecar
bmehta001 Sep 14, 2026
d56455b
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Sep 14, 2026
89ebcc5
Preserve session telemetry with in-memory storage
bmehta001 Sep 14, 2026
1744f7d
Remove hot-path filter and Curl copies
bmehta001 Sep 14, 2026
732a465
Simplify
bmehta001 Sep 14, 2026
f453ca9
Complete in-memory path simplification
bmehta001 Sep 14, 2026
3c4cc67
Merge remote-tracking branch 'msft/main' into bhamehta/avoid-in-memor…
bmehta001 Sep 14, 2026
6bc46bf
Repair CI after SQLite target migration
bmehta001 Sep 14, 2026
02685e9
Merge branch 'main' into bhamehta/winhttp-default-windows-transport
bmehta001 Sep 15, 2026
0ed32f9
Gate WinInet uploads on MS-root validation
bmehta001 Sep 16, 2026
9e54c3b
Merge current main into runtime fixes
bmehta001 Sep 17, 2026
3fac64a
Merge current main into transport hardening
bmehta001 Sep 17, 2026
9247ad0
Merge runtime fixes into transport hardening
bmehta001 Sep 17, 2026
74b1632
Repair CI after SQLite target migration
bmehta001 Sep 14, 2026
300d381
Fix merge-induced dispatcher and Apple test failures
bmehta001 Sep 17, 2026
7edd933
Merge CI compatibility repairs from #1429
bmehta001 Sep 17, 2026
edbafd1
Merge branch 'main' into bhamehta/avoid-in-memory-session-sidecar
bmehta001 Sep 17, 2026
33b7bab
Merge in-memory session sidecar fix from #1535
bmehta001 Sep 17, 2026
5ffc8e7
Restore durable storage functional coverage
bmehta001 Sep 17, 2026
63d3618
Address final transport review findings
bmehta001 Sep 17, 2026
0165474
Complete final transport review fixes
bmehta001 Sep 17, 2026
ccf5896
Preserve memory-only events during flush
bmehta001 Sep 17, 2026
5c749b9
android: make native telemetry validation reliable
bmehta001 Sep 17, 2026
aaefc84
tests: restore deterministic retry-limit validation
bmehta001 Sep 17, 2026
e38eb85
Retarget managed wrapper to .NET Framework 4.8
bmehta001 Sep 18, 2026
3694997
Restore EventFilterCollection emptiness check
bmehta001 Sep 18, 2026
01b6781
Build: preserve no-exception callback paths
bmehta001 Sep 19, 2026
e9f638f
Keep exception diagnostics warning-clean
bmehta001 Sep 19, 2026
5797ed9
SQLite: retain temp directory until shutdown succeeds
bmehta001 Sep 19, 2026
67f72a5
Serialize PAL logging shutdown
bmehta001 Sep 19, 2026
1d12483
Merge concurrent #1520 fixes
bmehta001 Sep 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
253 changes: 253 additions & 0 deletions .github/scripts/run-with-timeout.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$FilePath,

[ValidateRange(1, 86400)]
[int]$TimeoutSeconds = 600,

[ValidateRange(1, 16)]
[int]$ProcessCount = 1,

[ValidateNotNullOrEmpty()]
[string]$DiagnosticsDirectory = "test-diagnostics",

[ValidateNotNullOrEmpty()]
[string]$Label = [System.IO.Path]::GetFileNameWithoutExtension($FilePath),

[string]$ProcessArguments = ""
)

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"

if (-not ("RunWithTimeout.NativeMethods" -as [type])) {
Add-Type -TypeDefinition @"
namespace RunWithTimeout
{
using System;
using System.Runtime.InteropServices;

public static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process(
IntPtr processHandle,
[MarshalAs(UnmanagedType.Bool)] out bool wow64Process);
}
}
"@
}

function Stop-RunningProcess {
param(
[Parameter(Mandatory = $true)]
[System.Diagnostics.Process]$Process
)

if (-not $Process.HasExited) {
try {
Stop-Process -Id $Process.Id
}
catch {
$Process.Refresh()
if (-not $Process.HasExited) {
throw
}
}
$Process.WaitForExit()
}
}

function Get-DumpSystemDirectory {
param(
[Parameter(Mandatory = $true)]
[System.Diagnostics.Process]$Process
)

if (-not [Environment]::Is64BitOperatingSystem) {
return (Join-Path $env:WINDIR "System32")
}

$isWow64 = $false
if (-not [RunWithTimeout.NativeMethods]::IsWow64Process($Process.Handle, [ref]$isWow64)) {
$errorCode = [Runtime.InteropServices.Marshal]::GetLastWin32Error()
throw "Unable to determine the architecture of process $($Process.Id) (Win32 error $errorCode)."
}

if ($isWow64) {
return (Join-Path $env:WINDIR "SysWOW64")
}

if (-not [Environment]::Is64BitProcess) {
return (Join-Path $env:WINDIR "Sysnative")
}

return (Join-Path $env:WINDIR "System32")
}

function Save-ProcessDump {
param(
[Parameter(Mandatory = $true)]
[System.Diagnostics.Process]$Process,

[Parameter(Mandatory = $true)]
[string]$DumpPath
)

$dumpProcess = $null
$procdump = Get-Command procdump.exe -ErrorAction SilentlyContinue
if ($null -ne $procdump) {
# A minidump contains the thread stacks and module list needed for a
# deadlock diagnosis without copying arbitrary process memory into CI
# artifacts.
$arguments = "-accepteula -mm $($Process.Id) `"$DumpPath`""
$dumpProcess = Start-Process -FilePath $procdump.Source -ArgumentList $arguments -PassThru -NoNewWindow
}
else {
# The dump writer must match the target process architecture. A
# 64-bit helper cannot reliably capture Win32 thread context, and a
# 32-bit helper cannot inspect a 64-bit target.
$systemDirectory = Get-DumpSystemDirectory -Process $Process
$powershell = Join-Path $systemDirectory "WindowsPowerShell\v1.0\powershell.exe"
$dumpScript = Join-Path $PSScriptRoot "write-minidump.ps1"
$arguments = "-NoLogo -NoProfile -ExecutionPolicy Bypass -File `"$dumpScript`" -ProcessId $($Process.Id) -DumpPath `"$DumpPath`""
$dumpProcess = Start-Process -FilePath $powershell -ArgumentList $arguments -PassThru -NoNewWindow
}

if (-not $dumpProcess.WaitForExit(30000)) {
Stop-RunningProcess -Process $dumpProcess
throw "Timed out while capturing dump for process $($Process.Id)."
}
$dumpProcess.WaitForExit()
$dumpProcess.Refresh()

if ($dumpProcess.ExitCode -ne 0) {
throw "Dump capture for process $($Process.Id) exited with code $($dumpProcess.ExitCode)."
}

if (-not (Test-Path -LiteralPath $DumpPath -PathType Leaf)) {
throw "Dump capture for process $($Process.Id) did not create $DumpPath."
}

$dumpFile = Get-Item -LiteralPath $DumpPath -ErrorAction SilentlyContinue
if ($null -eq $dumpFile -or $dumpFile.Length -eq 0) {
throw "Dump capture for process $($Process.Id) created an empty dump."
}
}

$resolvedFilePath = (Resolve-Path -LiteralPath $FilePath).Path
$resolvedDiagnosticsDirectory = [System.IO.Path]::GetFullPath($DiagnosticsDirectory)
New-Item -ItemType Directory -Path $resolvedDiagnosticsDirectory -Force | Out-Null

$safeLabel = $Label -replace '[^A-Za-z0-9_.-]', '_'
$statusPath = Join-Path $resolvedDiagnosticsDirectory "$safeLabel-status.txt"
$startedAt = Get-Date
@(
"Command: $resolvedFilePath"
"Arguments: $ProcessArguments"
"Process count: $ProcessCount"
"Timeout seconds: $TimeoutSeconds"
"Started: $($startedAt.ToString('o'))"
) | Set-Content -LiteralPath $statusPath

$processes = @()
try {
for ($index = 0; $index -lt $ProcessCount; $index++) {
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = $resolvedFilePath
$startInfo.Arguments = $ProcessArguments
$startInfo.UseShellExecute = $false

$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
if (-not $process.Start()) {
throw "Failed to start $resolvedFilePath."
}
$processes += $process
}
}
catch {
foreach ($process in $processes) {
Stop-RunningProcess -Process $process
}
throw
}

$deadline = $startedAt.AddSeconds($TimeoutSeconds)
while ($true) {
$failedProcess = $null
$failedExitCode = 0
$running = @()
foreach ($process in $processes) {
if ($process.HasExited) {
# WaitForExit() populates ExitCode reliably for processes that can
# finish before the first polling iteration.
$process.WaitForExit()
$process.Refresh()
if ($process.ExitCode -ne 0 -and $null -eq $failedProcess) {
$failedProcess = $process
$failedExitCode = $process.ExitCode
}
}
else {
$running += $process
}
}

if ($null -ne $failedProcess) {
foreach ($process in $processes) {
Stop-RunningProcess -Process $process
}
Add-Content -LiteralPath $statusPath -Value @(
"Completed: $((Get-Date).ToString('o'))"
"Result: failed"
"Exit code: $failedExitCode"
)
exit $failedExitCode
}

if ($running.Count -eq 0) {
Add-Content -LiteralPath $statusPath -Value @(
"Completed: $((Get-Date).ToString('o'))"
"Result: passed"
"Exit code: 0"
)
exit 0
}

if ((Get-Date) -ge $deadline) {
Write-Host "::error::$Label exceeded its $TimeoutSeconds-second timeout."
Add-Content -LiteralPath $statusPath -Value @(
"Completed: $((Get-Date).ToString('o'))"
"Result: timed out"
"Exit code: 124"
)

foreach ($process in $running) {
try {
if (-not $process.HasExited) {
$detailsPath = Join-Path $resolvedDiagnosticsDirectory "$safeLabel-$($process.Id).txt"
Get-Process -Id $process.Id |
Format-List Id, ProcessName, StartTime, TotalProcessorTime, Threads, HandleCount |
Out-File -LiteralPath $detailsPath

$dumpPath = Join-Path $resolvedDiagnosticsDirectory "$safeLabel-$($process.Id).dmp"
Save-ProcessDump -Process $process -DumpPath $dumpPath
Write-Host "Captured $dumpPath"
}
}
catch {
Write-Warning $_
}
finally {
Stop-RunningProcess -Process $process
}
}
exit 124
}

Start-Sleep -Milliseconds 200
}
63 changes: 63 additions & 0 deletions .github/scripts/write-minidump.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateRange(1, [int]::MaxValue)]
[int]$ProcessId,

[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$DumpPath
)

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"

Add-Type -TypeDefinition @"
namespace WriteMiniDump
{
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

public static class NativeMethods
{
[DllImport("dbghelp.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MiniDumpWriteDump(
IntPtr processHandle,
uint processId,
SafeFileHandle fileHandle,
uint dumpType,
IntPtr exceptionParameters,
IntPtr userStreamParameters,
IntPtr callbackParameters);
}
}
"@

$process = Get-Process -Id $ProcessId
$resolvedDumpPath = [System.IO.Path]::GetFullPath($DumpPath)
$dumpStream = [System.IO.File]::Open(
$resolvedDumpPath,
[System.IO.FileMode]::Create,
[System.IO.FileAccess]::Write,
[System.IO.FileShare]::None)

try {
$created = [WriteMiniDump.NativeMethods]::MiniDumpWriteDump(
$process.Handle,
[uint32]$process.Id,
$dumpStream.SafeFileHandle,
0,
[IntPtr]::Zero,
[IntPtr]::Zero,
[IntPtr]::Zero)
if (-not $created) {
$errorCode = [Runtime.InteropServices.Marshal]::GetLastWin32Error()
throw "MiniDumpWriteDump failed for process $ProcessId (Win32 error $errorCode)."
}
}
finally {
$dumpStream.Dispose()
$process.Dispose()
}
2 changes: 2 additions & 0 deletions .github/workflows/build-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ jobs:
java-version: '17'
- name: Setup Android SDK
uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2
with:
packages: platform-tools
- name: Install NDK
run: |
java -version
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/build-windows-vs2022.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ jobs:
env:
SKIP_ARM_BUILD: 1
SKIP_ARM64_BUILD: 1
SKIP_NET40_BUILD: 1
PlatformToolset: v143
VSTOOLS_VERSION: vs2022
shell: cmd
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ jobs:
java-version: '17'
- name: Setup Android SDK
uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2
with:
packages: platform-tools
- name: Install NDK
run: |
java -version
Expand Down
13 changes: 11 additions & 2 deletions .github/workflows/test-vcpkg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ concurrency:
jobs:
windows:
runs-on: windows-latest
name: Windows (x64-windows-static)
name: Windows (x64-windows-static, ${{ matrix.transport }})
strategy:
fail-fast: false
matrix:
transport: [WinHTTP, WinInet]
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0

Expand All @@ -35,7 +39,12 @@ jobs:
shell: pwsh

- name: Run vcpkg port test
run: .\tests\vcpkg\test-vcpkg-windows.ps1 -VcpkgRoot "${{ runner.temp }}\vcpkg"
run: |
$arguments = @{ VcpkgRoot = "${{ runner.temp }}\vcpkg" }
if ("${{ matrix.transport }}" -eq "WinInet") {
$arguments.WinInet = $true
}
.\tests\vcpkg\test-vcpkg-windows.ps1 @arguments
shell: pwsh

linux:
Expand Down
Loading
Loading