Skip to content

StoreGate: Fix potential deadlock between SGImplSvc and DataProxy

The SGImplSvc::proxy methods take out a lock on the store, fetch the proxy, then call isValid() on the proxy. DataProxy::isValid() will acquire a lock on the proxy and than can call back to the store via TransientAddress::contextFromStore(). Thus, we can get a deadlock if SGImplSvc::proxy() is called in one thread and DataProxy::isValid() in another.

Resolve by releasing the SGImplSvc lock in proxy() before calling DataProxy::isValid().

Merge request reports