-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Labels
type_featureNew feature or requestNew feature or request
Description
Currently, the Go TFChain client isn't Thread safe (as Thabet originally mentioned).
-
A major issue with the current API is that The current implementation of GetClient() has a race condition because it returns references to the internal connection state (cl and meta) that other goroutines can modify after the lock is released.
-
Also, we need to verify if the inner client used is thread-safe and revise if we need/can go with this.
One option we have to deal with GetClient is to present new safer API that use operation-based approach
func (s *Substrate) withClient(op func(Conn, Meta) error) error {
s.mu.Lock()
defer s.mu.Unlock()
if s.closed {
return ErrClosed
}
// Execute operation while holding the lock
return op(s.cl, s.meta)
}
func (s *Substrate) withClientReturn(op func(Conn, Meta) (any, error)) (any, error) {
s.mu.Lock()
defer s.mu.Unlock()
if s.closed {
return nil, ErrClosed
}
return op(s.cl, s.meta)
}
Metadata
Metadata
Assignees
Labels
type_featureNew feature or requestNew feature or request