Fix FakeIP metadata async save

Co-authored-by: Sway-Chan <nz8r488bbc@privaterelay.appleid.com>
This commit is contained in:
Sway Chan
2026-08-10 18:42:27 +08:00
committed by GitHub
co-authored by Sway-Chan
parent f260e771ea
commit efbd84276c
2 changed files with 26 additions and 16 deletions
+17 -15
View File
@@ -38,21 +38,23 @@ var (
var _ adapter.CacheFile = (*CacheFile)(nil)
type CacheFile struct {
ctx context.Context
path string
cacheID []byte
storeFakeIP bool
storeRDRC bool
rdrcTimeout time.Duration
DB *bbolt.DB
resetAccess sync.Mutex
saveMetadataTimer *time.Timer
saveFakeIPAccess sync.RWMutex
saveDomain map[netip.Addr]string
saveAddress4 map[string]netip.Addr
saveAddress6 map[string]netip.Addr
saveRDRCAccess sync.RWMutex
saveRDRC map[saveRDRCCacheKey]bool
ctx context.Context
path string
cacheID []byte
storeFakeIP bool
storeRDRC bool
rdrcTimeout time.Duration
DB *bbolt.DB
resetAccess sync.Mutex
saveMetadataAccess sync.Mutex
saveMetadata *adapter.FakeIPMetadata
saveMetadataTimer *time.Timer
saveFakeIPAccess sync.RWMutex
saveDomain map[netip.Addr]string
saveAddress4 map[string]netip.Addr
saveAddress6 map[string]netip.Addr
saveRDRCAccess sync.RWMutex
saveRDRC map[saveRDRCCacheKey]bool
}
type saveRDRCCacheKey struct {
+9 -1
View File
@@ -59,9 +59,17 @@ func (c *CacheFile) FakeIPSaveMetadata(metadata *adapter.FakeIPMetadata) error {
}
func (c *CacheFile) FakeIPSaveMetadataAsync(metadata *adapter.FakeIPMetadata) {
c.saveMetadataAccess.Lock()
defer c.saveMetadataAccess.Unlock()
c.saveMetadata = metadata
if c.saveMetadataTimer == nil {
c.saveMetadataTimer = time.AfterFunc(C.FakeIPMetadataSaveInterval, func() {
_ = c.FakeIPSaveMetadata(metadata)
c.saveMetadataAccess.Lock()
savedMetadata := c.saveMetadata
c.saveMetadataAccess.Unlock()
if savedMetadata != nil {
_ = c.FakeIPSaveMetadata(savedMetadata)
}
})
} else {
c.saveMetadataTimer.Reset(C.FakeIPMetadataSaveInterval)