Monorepo for Tangled tangled.org

jetstream: fix data race filtering events by did #849

merged opened by octet-stream.net targeting master from octet-stream.net/core: thombles/did-map-data-race

Jetstream client's mutex for wantedDids is used inconsistently so there is a data race with the read paths. Fixed with some extra RLock() and RUnlock().

Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:txurc6ueald5d7462bpvzdby/sh.tangled.repo.pull/3m774wups2d22
+15 -4
Diff #0
+15 -4
jetstream/jetstream.go
··· 72 72 // existing instances of the closure when j.WantedDids is mutated 73 73 return func(ctx context.Context, evt *models.Event) error { 74 74 75 + j.mu.RLock() 75 76 // empty filter => all dids allowed 76 - if len(j.wantedDids) == 0 { 77 - return processFunc(ctx, evt) 77 + matches := len(j.wantedDids) == 0 78 + if !matches { 79 + if _, ok := j.wantedDids[evt.Did]; ok { 80 + matches = true 81 + } 78 82 } 83 + j.mu.RUnlock() 79 84 80 - if _, ok := j.wantedDids[evt.Did]; ok { 85 + if matches { 81 86 return processFunc(ctx, evt) 82 87 } else { 83 88 return nil ··· 122 127 123 128 go func() { 124 129 if j.waitForDid { 125 - for len(j.wantedDids) == 0 { 130 + for { 131 + j.mu.RLock() 132 + hasDid := len(j.wantedDids) != 0 133 + j.mu.RUnlock() 134 + if hasDid { 135 + break 136 + } 126 137 time.Sleep(time.Second) 127 138 } 128 139 }

History

1 round 1 comment
sign up or login to add to the discussion
octet-stream.net submitted #0
1 commit
expand
jetstream: fix data race filtering events by did
expand 1 comment
pull request successfully merged