• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lduchosal / ipnetwork
94%

Build:
DEFAULT BRANCH: master
Repo Added 19 Feb 2018 01:32PM UTC
Files 48
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
  • No branch selected
  • dependabot/nuget/dot-config/coverlet.console-10.0.0
  • dependabot/nuget/dot-config/coverlet.console-10.0.1
  • dependabot/nuget/dot-config/dotnet-coverage-18.10.0
  • dependabot/nuget/dot-config/dotnet-coverage-18.6.2
  • dependabot/nuget/dot-config/dotnet-coverage-18.7.0
  • dependabot/nuget/dot-config/dotnet-coverage-18.8.0
  • dependabot/nuget/dot-config/dotnet-coverage-18.9.0
  • dependabot/nuget/dot-config/versionize-2.5.0
  • dependabot/nuget/dot-config/versionize-2.6.0
  • dependabot/nuget/src/TestProject/MSTest.TestAdapter-4.2.1
  • dependabot/nuget/src/TestProject/MSTest.TestFramework-4.1.0
  • dependabot/nuget/src/TestProject/MSTest.TestFramework-4.2.1
  • dependabot/nuget/src/TestProject/MSTest.TestFramework-4.2.3
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.3.0
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.4.0
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.5.1
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.6.0
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.7.0
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.8.1
  • dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.9.0
  • dependabot/nuget/src/TestProject/coverlet.collector-10.0.0
  • dependabot/nuget/src/TestProject/coverlet.collector-10.0.1
  • dependabot/nuget/src/TestProject/coverlet.collector-8.0.0
  • dependabot/nuget/src/TestProject/coverlet.collector-8.0.1
  • dependabot/nuget/src/TestProject/coverlet.msbuild-10.0.0
  • dependabot/nuget/src/TestProject/coverlet.msbuild-10.0.1
  • dependabot/nuget/src/TestProject/coverlet.msbuild-8.0.0
  • dependabot/nuget/src/TestProject/coverlet.msbuild-8.0.1
  • dependabot/nuget/src/TestProject/multi-250fac5f43
  • dependabot/nuget/src/TestProject/multi-2634df520a
  • dependabot/nuget/src/TestProject/multi-2779a7fa38
  • dependabot/nuget/src/TestProject/multi-2f364cb2c2
  • dependabot/nuget/src/TestProject/multi-3559a68903
  • dependabot/nuget/src/TestProject/multi-372c4963bc
  • dependabot/nuget/src/TestProject/multi-3f71d811c1
  • dependabot/nuget/src/TestProject/multi-40646b1c30
  • dependabot/nuget/src/TestProject/multi-608c9eda82
  • dependabot/nuget/src/TestProject/multi-85caa0a6d0
  • dependabot/nuget/src/TestProject/multi-9ff8665230
  • dependabot/nuget/src/TestProject/multi-a8e5ea7825
  • dependabot/nuget/src/TestProject/multi-c65eda70d9
  • dependabot/nuget/src/TestProject/multi-d3affd226b
  • feat/cleanup-documentation
  • feat/code-quality
  • feat/netstandard20
  • feat/operator-add-int
  • feat/operators-subtract-add
  • feat/parserange
  • feat/sonarcloud-coverage
  • feat/sonarqube-cleanup-202508
  • feat/substract
  • feat/tryparsesanitanize
  • feat/ula-generation
  • feat/v4-nullable
  • feat/v4-remove-obsoletes
  • feat/web-blazor
  • fix/429-broadcast-cache-atomic-publication
  • fix/usable-to-match-CIDR-block-reference
  • master
  • upgrade/version-3.1-net8

18 Aug 2026 06:34AM UTC coverage: 94.069% (+0.06%) from 94.011%
1009

push

appveyor

web-flow
fix: publish the broadcast cache atomically (#429) (#436)

Contains() could silently return a wrong result under concurrency.

The broadcast cache was a BigInteger?, a 24 byte struct spanning three
fields (hasValue, BigInteger._sign and BigInteger._bits), read on a
lock-free fast path. Neither the read nor the write of such a struct is
atomic, so a reader could observe hasValue == true while the magnitude
was still half written, and compute a broadcast address of 0 or 1
instead of the real one. Contains() then answered false for addresses
that are in the network.

Measured on arm64: the torn state stayed observable for 7 to 19 us, not
a few nanoseconds, because the publishing thread can be descheduled
between the individual stores. Every reader taking the fast path during
that window gets a wrong answer.

The cache is now a volatile StrongBox<BigInteger>: a reference is
published by a single atomic store, and volatile orders that store
after the box is fully initialised. The double-checked lock is dropped
because CreateBroadcast is pure, so a racing duplicate computation is
harmless and cheaper than serialising every first access. That also
removes the per-instance sync object, one allocation less for every
IPNetwork2 ever created.

Tests: two race detectors plus one deterministic structural guard. The
race detectors only reproduce on weakly ordered multi-core machines, so
the structural guard is what protects the invariant on CI: it fails if
the cache ever goes back to a multi-word value type.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

2284 of 2428 relevant lines covered (94.07%)

487916.24 hits per line

Relevant lines Covered
Build:
Build:
2428 RELEVANT LINES 2284 COVERED LINES
487916.24 HITS PER LINE
Source Files on master
  • Tree
  • List 48
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
1009 master fix: publish the broadcast cache atomically (#429) (#436) Contains() could silently return a wrong result under concurrency. The broadcast cache was a BigInteger?, a 24 byte struct spanning three fields (hasValue, BigInteger._sign and BigInteger... push 18 Aug 2026 06:40AM UTC web-flow appveyor
94.07
32107531712 master fix: publish the broadcast cache atomically (#429) (#436) Contains() could silently return a wrong result under concurrency. The broadcast cache was a BigInteger?, a 24 byte struct spanning three fields (hasValue, BigInteger._sign and BigInteger... push 18 Aug 2026 06:36AM UTC web-flow travis-pro
93.58
1008 fix/429-broadcast-cache-atomic-publication Merge 2f3d26a00 into 5b1456b0a Pull #436 18 Aug 2026 06:16AM UTC web-flow appveyor
94.07
32105822453 fix/429-broadcast-cache-atomic-publication Merge 2f3d26a00 into 5b1456b0a Pull #436 18 Aug 2026 06:12AM UTC web-flow travis-pro
93.58
1007 master Merge pull request #435 from lduchosal/dependabot/nuget/src/TestProject/multi-40646b1c30 Bump Microsoft.CodeCoverage and Microsoft.NET.Test.Sdk push 17 Aug 2026 07:24AM UTC web-flow appveyor
94.01
32005216573 master Merge pull request #435 from lduchosal/dependabot/nuget/src/TestProject/multi-40646b1c30 Bump Microsoft.CodeCoverage and Microsoft.NET.Test.Sdk push 17 Aug 2026 07:19AM UTC web-flow travis-pro
93.52
1006 dependabot/nuget/src/TestProject/multi-40646b1c30 Merge ecb73bb06 into 383cdcaea Pull #435 17 Aug 2026 07:17AM UTC web-flow appveyor
94.01
32004739097 dependabot/nuget/src/TestProject/multi-40646b1c30 Merge ecb73bb06 into 383cdcaea Pull #435 17 Aug 2026 07:12AM UTC web-flow travis-pro
93.52
32004684711 dependabot/nuget/src/TestProject/Microsoft.CodeCoverage-18.9.0 Merge acff1b798 into 383cdcaea Pull #434 17 Aug 2026 07:12AM UTC web-flow travis-pro
93.52
1004 master Merge pull request #433 from lduchosal/dependabot/nuget/dot-config/dotnet-coverage-18.10.0 Bump dotnet-coverage from 18.9.0 to 18.10.0 push 13 Aug 2026 07:19AM UTC web-flow appveyor
94.01
See All Builds (672)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc